-
原始數據類型
// 定義布爾值 let isDone: boolean = false; // 16進制 let hexLiteral:number =0xf00d // 二進制 let binaryLiteral : number =0b1010 // 八進制 let octalLiteral:number = 0o744 let notNumber :number = NaN let infinityNumber:number = Infinity let undefined1:undefined=undefined let null1 : null=null // 定義字符串 let str:string ='121aaa' // 定義空值 function kongzhi():void { // 沒有返回值的函數 console.log('空置') } let kongzhi1:void=undefined // 編寫報錯 Type 'null' is not assignable to type 'void' let kongzhi2:void=null
-
聯合類型
let aStrOrNum: string | number; aStrOrNum = 'seven'; aStrOrNum = 7;
-
任意類型
let anyThing:any = 'Tom'; // 報錯 Uncaught TypeError: anyThing.setName is not a function // 編譯成js後報錯 anyThing.setName('Jerry'); // 報錯 Uncaught TypeError: anyThing.sayHello is not a function // 編譯成js後報錯 anyThing.sayHello();
-
對象類型(接口)
賦值的時候,變量的形狀必須和接口的形狀保持一致,不允許添加未定義的屬性
一旦定義了任意屬性,那麼確定屬性和可選屬性的類型都必須是它的類型的子集
只讀的約束存在於第一次給對象賦值的時候,而不是第一次給只讀屬性賦值的時候
interface Person{ // 只讀屬性,不可改變 readonly id:number, name:string, age:number, // 可有可無的屬性 // nihao?:string, // 定義可有可無的屬性 和 定義任何屬性不能同時存在,編寫時會報錯,編譯爲js文件後能用 // 定義任何鍵,定義字符串或者數字爲值 [propName:string]:string|number } let tom:Person={ id:114141, name:'你好', age:45, nihao:'dada', d:4 } // 報錯 編寫時會報錯,編譯爲js文件後能用 tom.id=123131
-
數組類型
let numArr:number[]=[1,2,3,4] // 編寫時報錯 Argument of type '"3"' is not assignable to parameter of type 'number' numArr.push('3') // 數組泛型定義數組 let numArr1: Array<string>=['1','2'] // 接口定義數組 interface numberArray{ [index:number]:number } let numArr2:numberArray=[1,2] // 類數組不是數組,例如arguments,只能用接口定義 // 編寫時報錯 // Type 'IArguments' is missing the following properties from type 'number[]': pop, push, concat, join, and 15 more function test(){ let args:number[]=arguments } // 接口定義方式一 interface fnArgs { [index:number]:any, length:number, callee:Function } function test(){ let args:fnArgs=arguments } // 接口定義方式二 function test2(){ let args:{ [index:number]:number, length:number, callee:Function }=arguments }
-
函數類型
// 函數聲明 function sum(x:number,y:number):number{ return x+y } // 注意,輸入多餘的(或者少於要求的)參數,是不被允許的: // 編寫錯誤 // Expected 2 arguments, but got 1 sum(1) // 編寫錯誤 // Expected 2 arguments, but got 3 sum(1,2,3) // 函數表達式 let sum1:(x:number,y:number) => number = (x:number,y:number):number =>{ return x+y } // 接口定義函數 // 採用函數表達式 | 接口定義函數的方式時,對等號左側進行類型限制,可以保證以後對函數名賦值時保證參數個數、參數類型、返回值類型不變。 interface sum2Interface{ (x:number,y:number):number } let sum2:sum2Interface; sum2 = (x:number,y:number)=>{ return x+y } // 可選參數,可選參數後面不允許再出現必需參數了 function stringContact(x:string,y?:number):number{ return x+y } // 默認值 function sum4(x:number=0,y:number=1):number{ return x+y*10 } sum4() // 10 // 剩餘參數,ES6 中,可以使用 ...rest 的方式獲取函數中的剩餘參數(rest 參數) // rest 參數只能是最後一個參數,關於 rest 參數,可以參考 ES6 中的 rest 參數 function push(array, ...items) { items.forEach(function(item) { array.push(item); }); } let a: any[] = []; push(a, 1, 2, 3); // 函數重載 function reverse(v:number):number; function reverse(v:string):string; function reverse(v:string|number):string|number{ if(typeof v === 'number'){ return Number(v.toString().split('').reverse().join('')) }else if(typeof v==='string'){ return v.split('').reverse().join("") } }
TypeScript 學習筆記 (二)—— 類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.