數(shù)組、元祖
數(shù)組:
let list = [1,'ddd']
let list2: any[] =[1,'ddd',true]
let list3: Array<number> = [1,2,3,4]
元祖類型:
let person1:[number, string]=[1,''阿萊克斯]
1.元祖bug ,使用元祖.push可以突破元祖的界限,無(wú)限度的給元祖添加長(zhǎng)度。
2.聲明元祖的時(shí)候一定要指明類型
聯(lián)合(Union)與文獻(xiàn)(Literal)類型
1.聯(lián)合類型就是一個(gè)類型的變量可以同時(shí)支持一個(gè)或幾個(gè)不同的類型,支持的類型之間|隔開
let union : string | number
function merge(n1: number | string, n2: number | string){
if(typeof n1 === 'string' || typeof n2 === 'string')
return n1.toString() + n2.toString();
else
return n1+n2;
}
2.字面量類型(literal),使用非常靈活,可以使用不同類型
let union3: 0 | 1 | 2
let literal : 1 | '2' | true | [1,2,3,4]
function merge(n1: number | string, n2: number | string, resultType: 'as-number' | 'as-string'){
if(resultType === 'as-string'){
return n1.toString() + n2.toString();
}
if(typeof n1 === 'string' || typeof n2 === 'string')
return n1.toString() + n2.toString();
else
return n1+n2;
}
console.log(merge(1,2,"as-number"))//打印3
console.log(merge(1,2,"as-string"))//打印12
console.log(merge('hello','world'))//打印helloworld
枚舉類型(Enum)
enum Color {
red = 'red',
green = 'green',
blue = '3',
}
let color = Color.green
console.log(color);//打印green
any 和 unkown未知類型
//any
let randomValue: any = 666;
//unkonwn未知類型
let randowValue: unknown === 666
//randowValue()時(shí)會(huì)報(bào)錯(cuò)提示
if(typeof randomValue === 'function'){
randowValue()//這樣就不會(huì)報(bào)錯(cuò)了
}
void、undefined 與 never
一個(gè)函數(shù)沒有任何返回的情況下,函數(shù)就是一個(gè)void類型,typescript中可以指定類型:
function printResult() : void {
console.log('lalala');
}
原生javascript中是沒有void的
undefined和void區(qū)別是 前者是有但是沒有賦值,后者是壓根沒有這個(gè)東西。
function printResult() :undefined {
console.log('lalala');
return
}
一個(gè)函數(shù)永遠(yuǎn)執(zhí)行不完 never
function throwError(message: string, errorCode: number):never{
throw {//拋出異常
message,
errorCode
}
}
throwError("not fount",404);
function whileLoop():never {
while(true){
console.log('hehehe');
}
}
3-9 類型適配(類型斷言)Type Assertions
//3-9類型適配(類型斷言)Type Assertions
let message : any;
message = 'abc';//這個(gè)時(shí)候message還是any類型
let ddd = (<string>message);//這個(gè)時(shí)候ddd就是字符串類型了
//另一種寫法
let ddd2 = (message as string)
3-10 函數(shù)類型
//javascript 和 typescript最大的區(qū)別是typescript可以定義類型
let log = (message: string) => console.log(message)
log('hello');
let log3 = (message: string, code: number) => {
console.log(message,code)
}
//在typescript中調(diào)用函數(shù)和javascript有一個(gè)顯著的不同,typescrip中如果定義了兩個(gè)函數(shù),就必須填寫所有的參數(shù),而且類型必須匹配一致
log3('hello',3)