日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类型兼容性

發(fā)布時間:2025/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类型兼容性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數

1.函數參數個數??

左邊的個數大于右邊

如果對函數 y 進行賦值,那么要求 x 中的每個參數都應在 y 中有對應,也就是 x 的參數個數小于等于 y 的參數個數

let x = (a: number) => 0; let y = (b: number, c: string) => 0;

2.函數參數類型

let x = (a: number) => 0; let y = (b: string) => 0; let z = (c: string) => false; x = y; // error 不能將類型“(b: string) => number”分配給類型“(a: number) => number”。 x = z; // error 不能將類型“(c: string) => boolean”分配給類型“(a: number) => number”。

3.剩余參數和可選參數

const getNum = (arr: number[],callback: (arg1: number, arg2?: number) => number // 這里指定第二個參數callback是一個函數,函數的第二個參數為可選參數 ): number => {return callback(...arr); // error 應有 1-2 個參數,但獲得的數量大于等于 0 };

4.函數參數雙向協(xié)變

函數參數雙向協(xié)變即參數類型無需絕對相同

他們的聯合類型相同即可

5.函數返回值類型

函數返回值應該是同種類型,不同就會報錯的

6.函數重載

function merge(arg1: number, arg2: number): number; // 這是merge函數重載的一部分 function merge(arg1: string, arg2: string): string; // 這也是merge函數重載的一部分 function merge(arg1: any, arg2: any) { // 這是merge函數實體return arg1 + arg2; } function sum(arg1: number, arg2: number): number; // 這是sum函數重載的一部分 function sum(arg1: any, arg2: any): any { // 這是sum函數實體return arg1 + arg2; } let func = merge; func = sum; // error 不能將類型“(arg1: number, arg2: number) => number”分配給類型“{ (arg1: number, arg2: number): number; (arg1: string, arg2: string): string; }”

上面例子中,sum函數的重載缺少參數都為string返回值為string的情況,與merge函數不兼容,所以賦值時會報錯。

?

1.比較兩個類類型的值的兼容性時,只比較實例的成員,類的靜態(tài)成員和構造函數不進行比較

?類類型比較兼容性時,只比較實例的成員

class Animal {
//成員static age: number; constructor(public name: string) {} } class People {
//成員 static age: string; constructor(public name: string) {} }

2.類的私有成員和受保護成員

類的私有成員和受保護成員會影響兼容性。當檢查類的實例兼容性時,如果目標(也就是要被賦值的那個值)類型(這里實例類型就是創(chuàng)建它的類)包含一個私有成員,那么源(也就是用來賦值的值)類型必須包含來自同一個類的這個私有成員,這就允許子類賦值給父類。

?

泛型

泛型包含類型參數,這個類型參數可能是任意類型,使用時類型參數會被指定為特定的類型,而這個類型只影響使用了類型參數的部分。來看例子:

interface Data<T> {} let data1: Data<number>; let data2: Data<string>; data1 = data2;

在這個例子中,data1 和 data2 都是 Data 接口的實現,但是指定的泛型參數的類型不同,TS 是結構性類型系統(tǒng),所以上面將 data2 賦值給 data1 是兼容的,因為 data2 指定了類型參數為 string 類型,但是接口里沒有用到參數 T,所以傳入 string 類型還是傳入 number 類型并沒有影響

?

轉載于:https://www.cnblogs.com/guangzhou11/p/11316158.html

總結

以上是生活随笔為你收集整理的类型兼容性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。