02. 簡(jiǎn)單基礎(chǔ)類(lèi)型:
string number boolean symbol
注意與 String Number Boolean Symbol的區(qū)別(一般用不到)橱鹏。
var a: String = new String('123');
var a:string = '123';
03. 復(fù)雜基礎(chǔ)類(lèi)型:
// 這里需要注意:數(shù)組類(lèi)型的值只有顯示添加了元組類(lèi)型注解后(或者使用 as const症歇,聲明為只讀元組)攒岛,
// TypeScript 才會(huì)把它當(dāng)作元組灸蟆,否則推薦出來(lái)的類(lèi)型就是普通的數(shù)組類(lèi)型
1. 接口類(lèi)型
ts會(huì)將對(duì)象字面量和變量區(qū)別對(duì)待考阱,如下示例:
function someMethod(params: { name: 'string' }){...}
// ① 報(bào)錯(cuò) 存在多余age字段
someMethod({ name: 'xx', age: 2 });
// ② ok
const params = { name: 'xx', age: 2 };
someMethod(params);// 類(lèi)型只要兼容 即可
接口定義方法:
interface ITestFuncion {
(params: ISomeType): void;
}
const someTestFunc:ITestFuncion = (params) => {...};
不過(guò)一般不用上面的方式定義方法類(lèi)型勾拉,一般用type或者內(nèi)聯(lián)的方式。
只讀屬性:
interface ITest {
readonly name: string;
}
索引簽名:
interface ITest {
[key: string]: string;
}
索引簽名的限制:具名屬性的類(lèi)型需要是索引簽名類(lèi)型的同類(lèi)型或者兼容的子類(lèi)型形入。
特殊性:數(shù)字索引字段可以與 [key: string] 類(lèi)型的索引兼容全跨。即如下示例是ok的:
const someObj: ITest = { 1: 'xxx' };
接口繼承:
interface A extends B {...}
接口實(shí)現(xiàn):
class A implements B {...}
2.類(lèi)型別名
將部分定義抽離出來(lái),可以進(jìn)行復(fù)用亿遂。
type A = number | string;
總結(jié):
大部分情況下浓若,interface和type是等價(jià)的,但是同時(shí)定義同名interface或type時(shí)蛇数,表現(xiàn)會(huì)有差異挪钓。
{
interface A { id: number; }
interface A { name: string; }
const a: A = { id: 123, name: 'xxx' }; // ok
// 利用這個(gè)特性 公共庫(kù)的定義文件 我們可以很方便的進(jìn)行擴(kuò)展
}
{
type A = { id: number; }
// ts報(bào)錯(cuò)
type A = { name: string; }
}
3. 聯(lián)合類(lèi)型(union)和交叉類(lèi)型(intersection)
可以幫助我們進(jìn)行類(lèi)型抽離,公共類(lèi)型的復(fù)用耳舅。
聯(lián)合(滿(mǎn)足C或D即可):
type A = C | D
交叉(同時(shí)滿(mǎn)足C和D):
type A = C & D
當(dāng)存在同名屬性時(shí)碌上,聯(lián)合和交叉類(lèi)型都會(huì)進(jìn)行類(lèi)型縮減,不同的是聯(lián)合類(lèi)型會(huì)往大里擴(kuò)展,交叉類(lèi)型會(huì)往小里擴(kuò)展馏予。
tips:never類(lèi)型是所有類(lèi)型的子類(lèi)型蔓纠。
合并聯(lián)合類(lèi)型(實(shí)際是取交集):
type UnionA = 'px' | 'em' | 'rem' | '%';
type UnionB = 'vh' | 'em' | 'rem' | 'pt';
type IntersectionUnion = UnionA & UnionB;
??:
type BorderColor = 'black' | 'red' | 'green' | 'yellow' | 'blue' | string; // 類(lèi)型縮減成 string 字符串字面量 black、red 等都無(wú)法自動(dòng)提示出來(lái)
type BorderColor = 'black' | 'red' | 'green' | 'yellow' | 'blue' | string & {}; // 字面類(lèi)型都被保留( ts的黑魔法)這樣IDE可以正常提示了
4. 枚舉類(lèi)型
定義命名常量集合吗蚌。
7 種常見(jiàn)的枚舉類(lèi)型:數(shù)字類(lèi)型腿倚、字符串類(lèi)型、異構(gòu)類(lèi)型蚯妇、常量成員和計(jì)算(值)成員敷燎、枚舉成員類(lèi)型和聯(lián)合枚舉、常量枚舉箩言、外部枚舉
// 默認(rèn)不指定其他類(lèi)型值既是數(shù)字類(lèi)型
enum TypeEnum {
A, // 默認(rèn)從0開(kāi)始遞增
B,
}
// 字符串類(lèi)型
enum TypeEnum {
A = 'A',
B = 'B',
}
// 異構(gòu)類(lèi)型:基本不這么用
enum TypeEnum {
A = 'A',
B = 2
}
// 常量成員和計(jì)算成員: 很難用到
在前邊示例中硬贯,涉及的枚舉成員的值都是字符串、數(shù)字字面量和未指定初始值從 0 遞增數(shù)字常量陨收,都被稱(chēng)作常量成員饭豹。
另外,在轉(zhuǎn)譯時(shí)务漩,通過(guò)被計(jì)算的常量枚舉表達(dá)式定義值的成員拄衰,也被稱(chēng)作常量成員。
enum SomeEnum {
// 常量成員
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// 計(jì)算成員
G = "123".length,
}
// 外部枚舉
declare enum Day {
SUNDAY,
MONDAY,
}
const work = (x: Day) => {
if (x === Day.SUNDAY) {
x; // 類(lèi)型是 Day
}
}
// declare enum 定義的枚舉轉(zhuǎn)化成js后 聲明移除饵骨,但是引用未被轉(zhuǎn)換 代碼如下
const work = (x) => {
if (x === Day.SUNDAY) {
x;
}
}
// 但使用declare const enum
declare const enum Day {
SUNDAY,
MONDAY,
}
const work = (x: Day) => {
if (x === Day.SUNDAY) {
x; // 類(lèi)型是 Day
}
}
// declare const enum 定義的枚舉轉(zhuǎn)化成js后 聲明移除 表現(xiàn)同常規(guī)枚舉定義(內(nèi)聯(lián)枚舉值)
const work = (x) => {
if (x === 0) {
x;
}
}
5. 泛型
什么是泛型:泛型指的是類(lèi)型參數(shù)化翘悉,即將原來(lái)某種具體的類(lèi)型進(jìn)行參數(shù)化。
和定義函數(shù)參數(shù)一樣居触,我們可以給泛型定義若干個(gè)類(lèi)型參數(shù)妖混,并在調(diào)用時(shí)給泛型傳入明確的類(lèi)型參數(shù)。
設(shè)計(jì)泛型的目的在于有效約束類(lèi)型成員之間的關(guān)系轮洋,比如函數(shù)參數(shù)和返回值制市、類(lèi)或者接口成員和方法之間的關(guān)系。
函數(shù)的泛型入?yún)⒈仨毢蛥?shù)/參數(shù)成員建立有效的約束關(guān)系才有實(shí)際意義.
function uselessGenerics<P>(): P {
return void 0 as unknown as P; // 無(wú)意義
}
// react 組件也支持泛型
function SomeCom<P>(props:P) {
return <></>;
};
<SomeCom<{ name: string; }> name="1" ... />
// 泛型支持運(yùn)算:
type StringOrNumberArray<E> = E extends string | number ? E[] : E;
type BooleanOrString = string | boolean;
// 鼠標(biāo)hover到WhatIsThis上弊予,顯示boolean | string[]祥楣,因?yàn)榉峙錀l件類(lèi)型:
// 關(guān)于分配條件類(lèi)型這個(gè)概念,官方的釋義:在條件類(lèi)型判斷的情況下(比如示例中出現(xiàn)的 extends)
// 如果入?yún)⑹锹?lián)合類(lèi)型块促,則會(huì)被拆解成一個(gè)個(gè)獨(dú)立的(原子)類(lèi)型(成員)進(jìn)行類(lèi)型運(yùn)算荣堰。
type WhatIsThis = StringOrNumberArray<BooleanOrString>; // boolean | string[]
// 這里BooleanOrString 不是一個(gè)泛型床未,不會(huì)拆解(你可以理解他就是一個(gè)類(lèi)型竭翠,所以返回他自己)
type BooleanOrStringGot = BooleanOrString extends string | number
? BooleanOrString[]
: BooleanOrString; // string | boolean
// 泛型約束:將泛型約束在特定的類(lèi)型范圍內(nèi)
function reflectSpecified<P extends number | string | boolean>(param: P):P {
return param;
}
// 給泛型指定默認(rèn)值
interface IProps<State = { id: number; name: string }> {
state: State
}
// 組合
interface IProps<State extends {} = { id: number; name: string }> {
state: State
}
ts入門(mén)實(shí)戰(zhàn)筆記
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)逮壁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人粮宛,你說(shuō)我怎么就攤上這事窥淆。” “怎么了巍杈?”我有些...
- 文/不壞的土叔 我叫張陵忧饭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我筷畦,道長(zhǎng)词裤,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任鳖宾,我火速辦了婚禮吼砂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鼎文。我一直安慰自己帅刊,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布漂问。 她就那樣靜靜地躺著赖瞒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚤假。 梳的紋絲不亂的頭發(fā)上栏饮,一...
- 那天,我揣著相機(jī)與錄音磷仰,去河邊找鬼袍嬉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灶平,可吹牛的內(nèi)容都是我干的伺通。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼逢享,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼罐监!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瞒爬,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弓柱,失蹤者是張志新(化名)和其女友劉穎沟堡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體矢空,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡航罗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屁药。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥血。...
- 正文 年R本政府宣布蜓耻,位于F島的核電站,受9級(jí)特大地震影響械巡,放射性物質(zhì)發(fā)生泄漏刹淌。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一讥耗、第九天 我趴在偏房一處隱蔽的房頂上張望有勾。 院中可真熱鬧,春花似錦古程、人聲如沸蔼卡。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雇逞。三九已至,卻和暖如春茁裙,著一層夾襖步出監(jiān)牢的瞬間塘砸,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓矾瘾,卻偏偏與公主長(zhǎng)得像女轿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壕翩,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 一蛉迹、基礎(chǔ)類(lèi)型:boolean為布爾值類(lèi)型,如let flag:boolean = true;number為數(shù)值類(lèi)型...
- 表情是什么戈泼,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒婿禽。表情可以傳達(dá)很多信息赏僧。高興了當(dāng)然就笑了大猛,難過(guò)就哭了扭倾。兩者是相互影響密不可...
- 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn)挽绩,但是人生放棄了冒險(xiǎn)膛壹,也就放棄了無(wú)數(shù)的可能。 ...