轉(zhuǎn)載地址
TypeScript基礎(chǔ)入門 - 接口 - 函數(shù)類型
項目實踐倉庫
https://github.com/durban89/typescript_demo.git
tag: 1.0.10
為了保證后面的學(xué)習(xí)演示需要安裝下ts-node,這樣后面的每個操作都能直接運(yùn)行看到輸出的結(jié)果葛峻。
npm install -D ts-node
后面自己在練習(xí)的時候可以這樣使用
npx ts-node src/learn_basic_types.ts
npx ts-node 腳本路徑
接口
TypeScript的核心原則之一是對值所具有的結(jié)構(gòu)進(jìn)行類型檢查。 它有時被稱做“鴨式辨型法”或“結(jié)構(gòu)性子類型化”巴比。 在TypeScript里术奖,接口的作用就是為這些類型命名和為你的代碼或第三方代碼定義契約。
函數(shù)類型
接口能夠描述JavaScript中對象擁有的各種各樣的外形匿辩。 除了描述帶有屬性的普通對象外腰耙,接口也可以描述函數(shù)類型。
為了使用接口表示函數(shù)類型铲球,我們需要給接口定義一個調(diào)用簽名挺庞。 它就像是一個只有參數(shù)列表和返回值類型的函數(shù)定義。參數(shù)列表里的每個參數(shù)都需要名字和類型稼病。如下示例
interface SomeInterface {
(arg1: string, arg2: string): boolean;
}
這樣定義后选侨,我們可以像使用其它接口一樣使用這個函數(shù)類型的接口。 下例展示了如何創(chuàng)建一個函數(shù)類型的變量然走,并將一個同類型的函數(shù)賦值給這個變量援制。
let someFunc: SomeInterface
someFunc = function (arg1: string, arg2: string) {
const res = arg1.search(arg2)
return res > -1;
}
console.log(someFunc('weast','east'));
運(yùn)行后得到的結(jié)果如下
true
對于函數(shù)類型的類型檢查來說,函數(shù)的參數(shù)名不需要與接口里定義的名字相匹配芍瑞。 比如晨仑,我們使用下面的代碼重寫上面的例子:
let someFunc2: SomeInterface;
someFunc2 = function (x: string, y: string): boolean {
const res = x.search(y);
return res > -1;
}
console.log(someFunc2('weast', 'east'));
運(yùn)行后得到的結(jié)果如下
true
函數(shù)的參數(shù)會逐個進(jìn)行檢查,要求對應(yīng)位置上的參數(shù)類型是兼容的。 如果你不想指定類型洪己,TypeScript的類型系統(tǒng)會推斷出參數(shù)類型妥凳,因為函數(shù)直接賦值給了 someInterface類型變量。 函數(shù)的返回值類型是通過其返回值推斷出來的(此例是 false和true)答捕。 如果讓這個函數(shù)返回數(shù)字或字符串逝钥,類型檢查器會警告我們函數(shù)的返回值類型與someInterface接口中的定義不匹配。
本實例結(jié)束實踐項目地址
https://github.com/durban89/typescript_demo.git
tag: 1.0.11