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