品牌建設(shè)網(wǎng)站規(guī)劃網(wǎng)店?duì)I銷(xiāo)與推廣策劃方案
TS的基礎(chǔ)類(lèi)型、類(lèi)型注解
TS的基礎(chǔ)類(lèi)型
js的數(shù)據(jù)類(lèi)型:
-
基礎(chǔ)數(shù)據(jù)類(lèi)型(7個(gè))
boolean string number null undefined BigInt Symbol
-
引用數(shù)據(jù)類(lèi)型(1個(gè))
Object
變量后面多了一個(gè)注解,注解為變量限定數(shù)據(jù)類(lèi)型,TS語(yǔ)法中不同數(shù)據(jù)的注解方式:
let num: number = 123;
let bool: boolean = false;
let str: string = 'false';let a: null = null;
let b: undefined = undefined;let c: object = {};
let d: symbol = Symbol();
let e: bigint = BigInt(92341341);let f:object = {};let g = function(a:number, b:number): number {return a+b;
}
// 長(zhǎng)度不可變,類(lèi)型確定的數(shù)組
let x: [string, number] = ['1', 2];
基礎(chǔ)類(lèi)型注解具體
布爾值
注解為大寫(xiě)B(tài)oolean時(shí)代表一個(gè)接口(interface)。
注解為小寫(xiě)boolean時(shí)代表一種數(shù)據(jù)類(lèi)型。
let bool1: boolean = false;
let bool2: Boolean = false;
let bool3: boolean = Boolean(0); //顯示類(lèi)型轉(zhuǎn)化
let bool4: boolean = new Boolean(0); //提示錯(cuò)誤,包裝類(lèi)不能給boolean類(lèi)型變量賦值
數(shù)字
TS與JS里所有數(shù)字都是浮點(diǎn)數(shù),浮點(diǎn)數(shù)類(lèi)型:number,都支持十進(jìn)制、十六進(jìn)制數(shù)、二進(jìn)制、八進(jìn)制字面量。
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;let a1: number = -0;
let a2: number = +0;
let a3: number = Infinity;
字符串
TS與JS一樣,使用雙引號(hào)(“ ”)、單引號(hào)(‘’)、模板字符串(``)表示string類(lèi)型。
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;
數(shù)組
數(shù)組可以通過(guò)
-
注解的形式來(lái)表示。
-
接口的形式來(lái)表示,因?yàn)閿?shù)組是對(duì)象。
let list:number[] = [1,2,3]; //數(shù)組里面的值是number
let list4: Array<number> = [1,2,3]; //接口:簡(jiǎn)單理解:這里<number>描述對(duì)象的成員的類(lèi)型let list1:(number | string)[] = [1,2,3, '4']; //聯(lián)合類(lèi)型注解:要求數(shù)組里面的值是number或string
let list2:number[][] = [[1,2,3]]; //數(shù)組嵌套,且內(nèi)部數(shù)組中的元素被要求為number類(lèi)型
let list3:(number[] | string | number)[] = [[1,2,3], '4', 6]; //要求數(shù)組內(nèi)部的成員為:number類(lèi)型數(shù)組,string值,number值
Any
為那些在編程階段還不清楚類(lèi)型的變量指定一個(gè)類(lèi)型(指定為任意類(lèi)型)。ts類(lèi)型檢查器不會(huì)起作用,相當(dāng)于沒(méi)有用ts。
let notSure: any = 4;
notSure = '123';
notSure = [];
unknown
安全的未知類(lèi)型
unknown、any賦任何值都不會(huì)報(bào)錯(cuò)。但使用時(shí),unknown會(huì)報(bào)錯(cuò)。
Void
void與any類(lèi)型相反,不表示任何類(lèi)型,**只在函數(shù)沒(méi)有返回值時(shí)使用。**其他情況基本不用。
function warnUser(): void {console.log("This is my warning message");
}
Null 和 Undefined
除了自己類(lèi)型外,默認(rèn)情況下null
和undefined
是所有類(lèi)型的子類(lèi)型。
let u: undefined = undefined;
let n: null = null;
let v: void = undefined;
然而,當(dāng)你指定了
--strictNullChecks
標(biāo)記,null
和undefined
只能賦值給void
和它們各自。
Never
never
類(lèi)型表示的是那些永不存在的值的類(lèi)型。報(bào)錯(cuò)、返回錯(cuò)誤、無(wú)限循環(huán)。
// 返回never的函數(shù)必須存在無(wú)法達(dá)到的終點(diǎn)
function error(message: string): never {throw new Error(message);
}// 推斷的返回值類(lèi)型為never
function fail() {return error("Something failed");
}// 返回never的函數(shù)必須存在無(wú)法達(dá)到的終點(diǎn)
function infiniteLoop(): never {while (true) {}
}
Object
object
表示非原始類(lèi)型,也就是除number
,string
,boolean
,symbol
,null
、undefined
、bigint
之外的類(lèi)型。
let obj1: object = {a: 1, b: 2};
let obj2: object = new Object();
let obj3: object = new Number();
補(bǔ)充:調(diào)出tsconfig.json
tsc -init
bigInt與symbol
- bigint表示大數(shù),在ts中的表現(xiàn)形式:
const bigNumber = BigInt(9007199254740991);
const bigNumber1:bigint = 9007199254740991n;
- Symbol()返回唯一字符串,在對(duì)象中可以作為私有屬性
const sym1: symbol = Symbol();
const sym2: symbol = Symbol();
console.log(sym1==sym2);//false
//symbol返回唯一字符串,在對(duì)象中可以作為私有屬性
補(bǔ)充:for of執(zhí)行的本質(zhì)就是調(diào)用對(duì)象上的迭代器方法,按照指定迭代順序返回結(jié)果:
var obj = {[Symbol.iterator]: function*(){yield 1;yield 2;yield 3;yield 4;}
}
for (let i of obj){console.log(i);
}
1
2
3
4