網(wǎng)站首頁 編程語言 正文
一、聯(lián)合類型
在TypeScript中,聯(lián)合類型(Union Types)是指用“|”符號(hào)將多個(gè)類型組合成一個(gè)的類型。這種類型可以包含不同的類型,例如字符串、數(shù)字或?qū)ο?/strong>。這些不同類型的值可以賦值給聯(lián)合類型的變量。而在使用這個(gè)變量時(shí),需要對(duì)不同類型的值進(jìn)行類型檢查,以確定當(dāng)前變量的類型。
以下是一個(gè)簡(jiǎn)單的聯(lián)合類型的示例:
let myVar: string | number;
myVar = "hello";
console.log(myVar.length); // 輸出 5
myVar = 123;
console.log(myVar.length); // 報(bào)錯(cuò),類型“number”上不存在屬性“l(fā)ength”
在這個(gè)例子中,myVar 變量的類型是 string | number,可以賦值為一個(gè)字符串或者一個(gè)數(shù)字。
- 當(dāng)賦值為字符串時(shí),可以調(diào)用 length 屬性;
- 當(dāng)賦值為數(shù)字時(shí),就無法調(diào)用 length 屬性,會(huì)導(dǎo)致編譯報(bào)錯(cuò)。
使用聯(lián)合類型可以增強(qiáng)代碼的靈活性,提高代碼的復(fù)用性和可維護(hù)性。在實(shí)際開發(fā)中,它也經(jīng)常被用于函數(shù)參數(shù)的類型聲明、接口中的屬性類型聲明等方面。
二、類型別名
TypeScript中的類型別名是一種非常有用的功能,它可以讓我們給一種類型取一個(gè)自定義的名稱。這個(gè)名稱可以用來代替這種類型的任何地方,讓代碼更加簡(jiǎn)潔易讀。
類型別名使用type
關(guān)鍵字來創(chuàng)建,具體的語法如下:
type MyType = string;
這個(gè)語法在TypeScript中是很常見的,它把MyType
這個(gè)名稱與string
類型綁定在一起。現(xiàn)在,我們可以用MyType
來代替string
類型了:
let myStr: MyType = "Hello, world";
這里的let
語句聲明了一個(gè)變量myStr
,它的類型是MyType
,也就是string
。我們可以看到,MyType
已經(jīng)被成功地解析成了string
類型。
類型別名也可以用來定義更復(fù)雜的類型。例如,我們可以把一個(gè)對(duì)象類型定義為類型別名:
type Person = {
name: string;
age: number;
};
這里的Person
類型別名代表了一個(gè)對(duì)象類型,它包含兩個(gè)屬性:name
和age
,分別是string
類型和number
類型。現(xiàn)在,我們可以用Person
來定義一個(gè)對(duì)象:
let john: Person = {
name: "John",
age: 30
};
這里的john
變量的類型就是Person
,它是一個(gè)對(duì)象,帶有name
和age
兩個(gè)屬性。
總之,類型別名是TypeScript中非常實(shí)用的功能,在定義復(fù)雜類型、簡(jiǎn)化代碼等方面都有很大的幫助。
三、接口
TypeScript中的接口是用來定義代碼之間交互的契約。它們可以用于描述對(duì)象、函數(shù)、類等的結(jié)構(gòu)和規(guī)范。
下面是一些關(guān)于TypeScript接口的詳細(xì)介紹:
- 對(duì)象接口
對(duì)象接口是在TypeScript中最常用的接口之一,它用于描述對(duì)象的結(jié)構(gòu)。它可以定義對(duì)象應(yīng)該有哪些屬性,它們的類型是什么,以及它們是否是可選的。例如:
interface Person {
name: string;
age: number;
email?: string;
}
const person: Person = {
name: 'John',
age: 25
}
在這個(gè)例子中,Person接口定義了一個(gè)人的結(jié)構(gòu),包括一個(gè)必填的“name”屬性,一個(gè)必填的“age”屬性和一個(gè)可選的“email”屬性。然后創(chuàng)建了一個(gè)名為“person”的對(duì)象,符合這個(gè)接口的定義。
- 函數(shù)接口
函數(shù)接口描述函數(shù)的形式參數(shù)和返回類型。例如:
interface Add {
(x: number, y: number): number;
}
const add: Add = (x, y) => {
return x + y;
};
在這個(gè)例子中,Add接口描述一個(gè)返回類型為number的函數(shù),該函數(shù)接受兩個(gè)參數(shù):x和y,這兩個(gè)參數(shù)均為number類型。
- 可索引類型接口
可索引類型接口用于描述可以像數(shù)組一樣使用的對(duì)象。它允許您定義一個(gè)對(duì)象,該對(duì)象通過整數(shù)或字符串屬性來訪問其元素。例如:
interface StringArray {
[index: number]: string;
}
const myArray: StringArray = ['Hello', 'World'];
在這個(gè)例子中,StringArray接口允許我們通過數(shù)字來訪問數(shù)組中的元素,因此myArray[0]將返回字符串“Hello”。
- 類接口
類接口描述一個(gè)類的實(shí)例結(jié)構(gòu)。它可以描述一個(gè)類中必須實(shí)現(xiàn)的屬性和方法。例如:
interface Animal {
name: string;
eat(food: string): void;
sleep(hours: number): void;
}
class Cat implements Animal {
name = 'Cat';
eat(food: string) {
console.log(`I'm eating ${food}`);
}
sleep(hours: number) {
console.log(`I'm sleeping for ${hours} hours`);
}
}
在這個(gè)例子中,Animal接口描述了一個(gè)動(dòng)物實(shí)例應(yīng)該具有的屬性和方法。Cat類實(shí)現(xiàn)了這個(gè)接口,因此它必須定義name,eat和sleep方法以滿足該接口。
總而言之,TypeScript接口提供了一種描述結(jié)構(gòu)和規(guī)范的方式,從而使代碼更加清晰和易于理解。通過使用接口,開發(fā)人員可以定義約束,使得代碼更加穩(wěn)健、可靠和易于擴(kuò)展。
四、類型別名和接口的區(qū)別
接口和類型別名的區(qū)別主要在以下幾個(gè)方面:
- 可以定義對(duì)象的形狀的只能是接口,類型別名不能。
interface Person {
name: string;
age: number;
}
type MyPerson = {
name: string;
age: number;
}
- 類型別名可以定義任意類型的別名,而不僅僅是對(duì)象類型。例如:
type MyBoolean = boolean;
type MyFunction = (...args: any[]) => any;
- 類型別名可以定義聯(lián)合類型、交叉類型、元組等復(fù)雜類型:
type MyType = string | number;
type MyObj = { a: string } & { b: number };
type MyTuple = [string, number];
- 接口可以定義擴(kuò)展操作符(…)和可選屬性:
interface Foo {
bar: string;
baz?: number;
[k: string]: any; // 使用擴(kuò)展操作符
}
- 接口可以定義函數(shù):
interface MyFunc {
(x: number, y: number): number;
}
- 接口可以被多次擴(kuò)展,類型別名不能被擴(kuò)展
接口可以被多次擴(kuò)展,即一個(gè)接口可以在定義后被多次擴(kuò)展,每次擴(kuò)展都可以添加新的屬性或方法。比如下面的示例:
interface Person {
name: string;
}
interface Person {
age: number;
}
const person: Person = {
name: "Tom",
age: 18,
};
在上面的示例中,定義了一個(gè)名為Person
的接口,并且在后面又定義了一個(gè)同名的接口。這是完全允許的,因?yàn)檫@兩個(gè)接口在類型聲明時(shí)是合并的。最終得到的Person
接口將包含name
和age
兩個(gè)屬性。
相比之下,類型別名不能被擴(kuò)展。例如:
type Person = {
name: string;
};
type Person = {
age: number;
};
在上面的示例中,我們嘗試定義了兩個(gè)同名的類型別名Person
,但是這會(huì)引起編譯錯(cuò)誤。因?yàn)轭愋蛣e名只能被定義一次。如果我們需要添加新的屬性,就需要重新定義一個(gè)新的類型別名,而不是擴(kuò)展已有的類型別名。
總的來說,接口更適合于描述對(duì)象的形狀和方法,而類型別名更適合于為復(fù)雜類型定義別名,或定義函數(shù)類型、聯(lián)合類型等。
五、類型斷言
TypeScript的類型斷言可以讓開發(fā)者手動(dòng)指定一個(gè)變量的類型,即告訴編譯器當(dāng)前變量的類型是什么,這個(gè)指定的類型可以與變量實(shí)際的類型不同。
類型斷言可以在變量名前加上<type>
或者使用as
關(guān)鍵字,以下是兩種寫法的示例:
-
<type>variable
let someValue: any = "hello world"; let strLength: number = (<string>someValue).length;
-
variable as type
let someValue: any = "hello world"; let strLength: number = (someValue as string).length;
類型斷言有以下幾個(gè)特點(diǎn):
- 它不會(huì)在運(yùn)行時(shí)進(jìn)行類型檢查或類型轉(zhuǎn)換,僅僅在編譯時(shí)發(fā)揮作用。
- 如果類型斷言的類型與變量實(shí)際的類型不同,則會(huì)導(dǎo)致編譯錯(cuò)誤。
- 類型斷言可以應(yīng)用于任何類型,包括原始類型、對(duì)象類型、函數(shù)類型等。
原文鏈接:https://blog.csdn.net/jieyucx/article/details/131341689
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-10-24 Python?NumPy教程之?dāng)?shù)據(jù)類型對(duì)象詳解_python
- 2022-09-14 Python實(shí)現(xiàn)刪除windows下的長(zhǎng)路徑文件_python
- 2022-11-15 Apache?Doris的Bitmap索引和BloomFilter索引使用及注意事項(xiàng)_Linux
- 2022-10-27 在Rust?web服務(wù)中使用Redis的方法_Redis
- 2022-06-27 python結(jié)合shell自動(dòng)創(chuàng)建kafka的連接器實(shí)戰(zhàn)教程_python
- 2022-11-09 Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解_Android
- 2022-07-03 如何讓Python在HTML中運(yùn)行_python
- 2022-07-29 使用React?Router?v6?添加身份驗(yàn)證的方法_React
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支