TypeScript类型检查机制
生活随笔
收集整理的這篇文章主要介紹了
TypeScript类型检查机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
類型推斷
指不需要指定變量的類型,TS編譯器可以根據某些規則自動推斷出類型。
什么時候會有類型推斷?
- 聲明變量時沒有指定類型
- 函數默認參數
- 函數返回值
- ......
注意:類型斷言不能亂用,要對上下文環境有充足的預判,沒有任何根據的斷言會帶來安全隱患!
類型兼容
TS允許類型相互兼容的變量(函數、類等結構)相互賦值。
當一個類型Y可以被賦值給另一個類型X時,就認為類型X兼容Y,X為目標類型,Y為源類型。
兼容規則:
- 結構之間兼容:成員少的兼容成員多的
- 函數之間兼容:參數多的兼容參數少的
接口兼容性
interface X {a: any;b: any; } interface Y {a: any;b: any;c: any; } let x: X = {a:1,b:2}; let y: Y = {a:1,b:2,c:3}; x = y; // x兼容y 成員少的會兼容成員多的函數兼容性
// 參數個數的兼容 type Handler = (a: number,b: number) => void; function hof(handler: Handler) {return handler } let handler1 = (a:number) => {}; hof(handler1); // 一個參數可以兼容 let handler2 = (a: number,b: number,c: number) => {}; // hof(handler2); // 三個參數不被兼容// 可選參數和剩余參數的兼容 let a1 = (p1: number, p2: number) => {}; let b1 = (p1?: number, p2?: number) => {}; let c1 = (...args: number[]) => {}; a1 = b1; a1 = c1; // b1 = a1; // 可選參數不能被兼容。需要將tsconfig.json中“strictFunctionTypes”置為false即可 // b1 = c1; c1 = a1; c1 = b1;類的兼容性
兩個定義不同的類互不兼容,子類在繼承父類后沒有做改動,可以兼容父類。
泛型的兼容性
兩個定義完全一樣的泛型函數相互兼容
類型保護
TypeScript能夠在特定的區塊中保證變量屬于某種確定的類型。可以在此區塊中放心地訪問此類型的屬性和方法。
比如,我們要判斷一個對象是否含有某個方法
interface OBJ {name: string,age: number,sex: boolean } let obj: OBJ = {name: "typescript",age: 10,sex: true, }; if(obj.sex) // obj中有sex屬性,所以OK {console.log("has sex"); } // if(obj.bac) {} // obj中沒有bac屬性,此處報錯。我們有四種提供類型保護的方式:
- instanceof? ? 用于判斷一個實例是否屬于某個類
- in? ? 判斷一個屬性/方法是否屬于某個對象
- typeof? ? 用于判斷基本類型
- 類型保護函數? ? 當判斷邏輯復雜時,可以自定義判斷函數
?
轉載于:https://www.cnblogs.com/V587Chinese/p/11474686.html
總結
以上是生活随笔為你收集整理的TypeScript类型检查机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么申请浦发美丽女人花语卡?要满足这些申
- 下一篇: 使用Jest进行单元测试