欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Typescript中類型兼容的實現(xiàn)

 更新時間:2023年12月29日 09:08:05   作者:新時代的弩力  
在TypeScript 編程中,類型兼容是最基礎(chǔ)的一道檢查機制,一旦代碼中出現(xiàn)類型不兼容的表達式,編譯就會失敗,本文主要介紹了Typescript中類型兼容的實現(xiàn),感興趣的可以了解一下

typscript中的類型兼容是基于結(jié)構(gòu)子類型的(子類型兼容和賦值兼容),即只使用其成員來判定是兼容,這是根據(jù)JavaScript的特性設(shè)計的,因為js中有很多匿名對象,只要y的所有成員都能在對象x中能找到,那么y=x就能成立,在強類型語言如Java中就不行。

比較對象兼容

比如在一個interface和一個class,只要interface的變量p的成員都能在class或者一個匿名對象中能找到,那么就能把這個class實例或匿名對象賦值給p,如果是對象字面量會觸發(fā)嚴格檢查操作,需要將對象字面量賦值給一個變量y,再賦值給變量p

interface Named {
    name: string;
}

class Person {
    name: string;
}

let p:Named

p = new Person()
p = {name:'xxxx'}
// 此時會報錯 age 不兼容 Named,因為對象字面量會觸發(fā)嚴格類型檢查,可以通過 as 斷言或者 中間變量y
p = {name:'xxxx',age:10}

在這里插入圖片描述

函數(shù)參數(shù)兼容

函數(shù)參數(shù)也是一樣,實參要兼容形參類型

在這里插入圖片描述

兩個函數(shù)兼容性

參數(shù)列表數(shù)量

判斷函數(shù)x是否能賦值給函數(shù)y,一是從參數(shù)數(shù)量和參數(shù)類型上,函數(shù)x參數(shù)數(shù)量少的,且對應(yīng)參數(shù)類型兼容的能賦值給函數(shù) y

在這里插入圖片描述

函數(shù)返回值類型,協(xié)變

一是從函數(shù)的返回值類型上,函數(shù) x 的返回值類型必須是函數(shù) y 的返回值類型的子類,否則報錯

在這里插入圖片描述

函數(shù)參數(shù)雙向協(xié)變(老版本ts)

函數(shù)的參數(shù)既能賦值父類也能賦值子類

函數(shù)參數(shù)逆變

當函數(shù) x 的參數(shù)是 函數(shù) y 的參數(shù)的時,函數(shù) x 也能賦值給 y ,因為函數(shù) y 將來調(diào)用時傳入的時子類如 Dog 類,那么如果此時用函數(shù) x 替換 函數(shù) y ,相當于函數(shù) x 接收了 Dog 類,而函數(shù) x 的參數(shù)類型時 Animal 父類,那么也是兼容的。

interface Animal{
    name:string
}
interface Dog extends Animal{
    bark:()=>void
}

let x = (a:Animal)=>{}
let y = (d:Dog)=>{}

y = x // 函數(shù)參數(shù)逆變

x = y // 報錯

// 因為存在這種情況
function test(fn:(d:Dog)=>void){
    const dog = {name:'dog',bark(){}}

    fn(dog) // 當傳入的fn是 (a:Animal)=>void 類型時,Animal類也能接收Dog子類,所以逆變的意義就在于此
}

test(x)

枚舉與數(shù)字之間的兼容

enum Status { Ready, Waiting };
enum Color { Red, Blue, Green };

let s = Status.Ready;
s = 1 // enum 數(shù)字類型兼容
s = Color.Green;  // Error

類和對象字面和接口差不多,主要區(qū)別在于類具有靜態(tài)部分和實例部分,兩個類實例對象之間能否賦值不在于其類是否一直,這與Java等語言不同,A 類和 B 類的實例成員只要一致,那么就能相互賦值。但是類的私有成員和受保護成員會影響兼容性,如果目標類型包含一個私有成員,那么源類型必須包含來自同一個類的這個私有成員。 同樣地,這條規(guī)則也適用于包含受保護成員實例的類型檢查。 這允許子類賦值給父類,但是不能賦值給其它有同樣類型的類。

class Animal {
    feet: number=0;
    constructor(name: string, numFeet: number) { }
}

class Size {
    feet: number=0;
    constructor(numFeet: number) { }

}

let a: Animal = new Animal('',0)
let s: Size = new Size(0);

a = s;  // OK
s = a;  // OK

泛型

泛型其實對于兼容性的影響在于影響其結(jié)果類型,然后在結(jié)果類型再去比較類型兼容性
如下,經(jīng)過泛型推導(dǎo)后的類型是{},那么 x , y 的類型比較就是最終的類型比較

interface Empty<T> {
}
let x: Empty<number>;
let y: Empty<string>;

x = y;  // OK, because y matches structure of x

到此這篇關(guān)于Typescript中類型兼容的實現(xiàn)的文章就介紹到這了,更多相關(guān)Typescript 類型兼容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:

相關(guān)文章

  • Javascript 繼承機制實例

    Javascript 繼承機制實例

    說明繼承機制最簡單的方法是,利用一個經(jīng)典的例子——幾何形狀。
    2009-08-08
  • 詳解WordPress開發(fā)中g(shù)et_current_screen()函數(shù)的使用

    詳解WordPress開發(fā)中g(shù)et_current_screen()函數(shù)的使用

    這篇文章主要介紹了WordPress開發(fā)中g(shù)et_current_screen()函數(shù)的使用,get_current_screen()通常在對象的實例化時使用,需要的朋友可以參考下
    2016-01-01
  • 純前端使用ffmpeg實現(xiàn)視頻壓縮的具體方法及踩坑

    純前端使用ffmpeg實現(xiàn)視頻壓縮的具體方法及踩坑

    這篇文章主要給大家介紹了關(guān)于純前端使用ffmpeg實現(xiàn)視頻壓縮的具體方法及踩坑,要在前端使用FFmpeg進行視頻壓縮,你可以使用FFmpeg的JavaScript,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 使用時間戳解決ie緩存的問題

    使用時間戳解決ie緩存的問題

    當編輯某條數(shù)據(jù)時,再回過頭來進行編輯,會發(fā)現(xiàn),里面的數(shù)據(jù)和沒有編輯以前是一樣的,這就是ie緩存的問題,下面是一個不錯的解決方法
    2014-08-08
  • 簡單的js圖片輪換代碼(js圖片輪播)

    簡單的js圖片輪換代碼(js圖片輪播)

    這篇文章主要介紹了簡單的js圖片輪換代碼(js圖片輪播),需要的朋友可以參考下
    2014-05-05
  • 關(guān)于Function中的bind()示例詳解

    關(guān)于Function中的bind()示例詳解

    其實所謂bind顧名思義就是綁定。bind()方法會創(chuàng)建一個新函數(shù),當這個新函數(shù)被調(diào)用時,它的this值是傳遞給bind()的第一個參數(shù),它的參數(shù)是bind()的其他參數(shù)和其原本的參數(shù)。這么說可能很多人都糊涂了,下面通過這篇文章的示例來給大家詳細的介紹下吧。
    2016-12-12
  • JS給元素注冊事件的代碼

    JS給元素注冊事件的代碼

    麥雞的TAB切換功能代碼
    2008-10-10
  • javascript 跨瀏覽器的事件系統(tǒng)

    javascript 跨瀏覽器的事件系統(tǒng)

    從技術(shù)上講,javascript并沒有提供內(nèi)置的系統(tǒng)來實現(xiàn)這個非常重要的事件驅(qū)動編程,不過得益于瀏覽器的DOM 事件模型,這缺點并沒有過多地暴露出來。
    2010-03-03
  • DWR內(nèi)存兼容及無法調(diào)用問題解決方案

    DWR內(nèi)存兼容及無法調(diào)用問題解決方案

    這篇文章主要介紹了DWR內(nèi)存兼容及無法調(diào)用問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • TypeScript中類型映射的使用

    TypeScript中類型映射的使用

    TypeScript中的映射類型和數(shù)學(xué)中的映射類似,能夠?qū)⒁粋€集合的元素轉(zhuǎn)換為新集合的元素,本文就來介紹一下TypeScript中類型映射的使用,感興趣的可以了解一下
    2023-10-10

最新評論