學習TypeScrip6(類型斷言 | 聯合類型 | 交叉類型)

qq1195566313 2022-01-07 11:02:32 阅读数:962

typescrip6 typescrip 交叉

聯合類型

//例如我們的手機號通常是13XXXXXXX 為數字類型 這時候產品說需要支持座機
//所以我們就可以使用聯合類型支持座機字符串
let myPhone: number | string = '010-820'
//這樣寫是會報錯的應為我們的聯合類型只有數字和字符串並沒有布爾值
let myPhone: number | string = true

函數使用聯合類型、

const fn = (something:number | boolean):boolean => {
return !!something
}

交叉類型

多種類型的集合,聯合對象將具有所聯合類型的所有成員

interface People {
age: number,
height: number
}
interface Man{
sex: string
}
const xiaoman = (man: People & Man) => {
console.log(man.age)
console.log(man.height)
console.log(man.sex)
}
xiaoman({age: 18,height: 180,sex: 'male'});

類型斷言

語法: 值 as 類型 或 <類型>值 value as string <string>value
interface A {
run: string
}
interface B {
build: string
}
const fn = (type: A | B): string => {
return type.run
}
//這樣寫是有警告的應為B的接口上面是沒有定義run這個屬性的
interface A {
run: string
}
interface B {
build: string
}
const fn = (type: A | B): string => {
return (type as A).run
}
//可以使用類型斷言來推斷他傳入的是A接口的值

需要注意的是,類型斷言只能够「欺騙」TypeScript 編譯器,無法避免運行時的錯誤,反而濫用類型斷言可能會導致運行時錯誤:

使用any臨時斷言

window.abc = 123
//這樣寫會報錯因為window沒有abc這個東西
(window as any).abc = 123
//可以使用any臨時斷言在 any 類型的變量上,訪問任何屬性都是允許的。

類型斷言是不具影響力的

在下面的例子中,將 something 斷言為 boolean 雖然可以通過編譯,但是並沒有什麼用 並不會影響結果 應為編譯過程中會删除類型斷言

function toBoolean(something: any): boolean {
return something as boolean;
}
toBoolean(1);
// 返回值為 1
//

下一章學習TypeScrip7(內置對象)_qq1195566313的博客-CSDN博客

版权声明:本文为[qq1195566313]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071102319815.html