Theme NexT works best with JavaScript enabled
基本 說明
.ts vs .tsx
.jsx 是javascript文件並表明使用了JSX語法。
.ts 是typescript 文件的擴展名
.tsx 表明是typescript 文件並使用了JSX語法。
install & compile install to global 1 2 3 4 npm install -g typescript tsc hello.ts
install to package 1 2 3 4 5 6 npm init npm install typescript --save-dev npx tsc *.ts
type
Types
boolean
number
string
null
undefined
any : 任何屬性都是允許
如果沒有明確的指定型別,那麼 TypeScript 會依照型別推論(Type Inference)的規則推斷出一個型別
1 2 let myName: string = 'Tom' ;let myAge: number = 25 ;
聯合型別 1 2 3 4 5 6 7 8 9 let myFavoriteNumber: string | number;myFavoriteNumber = 'seven' ; myFavoriteNumber = 7 ; function getString (something: string | number ): string { return something.toString(); }
物件的型別 - 介面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 interface Person { name: string; age: number; } let tom: Person = { name: 'Tom' , age: 25 }; interface Person { name: string; age?: number; } let tom: Person = { name: 'Tom' }; interface Person { name: string; age?: number; [propName: string]: any; } let tom: Person = { name: 'Tom' , gender: 'male' }; interface Person { readonly id: number; name: string; age?: number; [propName: string]: any; } let tom: Person = { id: 89757 , name: 'Tom' , gender: 'male' };
陣列的型別 1 2 3 4 5 6 7 8 let fibonacci: number [] = [1 , 1 , 2 , 3 , 5 ];let fibonacci: Array <number > = [1 , 1 , 2 , 3 , 5 ];let list: any [] = ['xcatliu' , 25 , { website : 'http://xcatliu.com' }];
函式的型別 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 function sum (x: number , y: number ): number { return x + y; } function buildName (firstName: string , lastName?: string ) { if (lastName) { return firstName + ' ' + lastName; } else { return firstName; } } let tomcat = buildName('Tom' , 'Cat' );let tom = buildName('Tom' );function buildName (firstName: string , lastName: string = 'Cat' ) { return firstName + ' ' + lastName; } let tomcat = buildName('Tom' , 'Cat' );let tom = buildName('Tom' );function push (array: any [], ...items: any [] ) { items.forEach(function (item ) { array.push(item); }); } let a = [];push(a, 1 , 2 , 3 );
型別別名(定義型別) 1 2 3 4 5 6 7 8 9 10 11 12 type Name = string; type NameResolver = () => string; type NameOrResolver = Name | NameResolver; function getName (n: NameOrResolver ): Name { if (typeof n === 'string' ) { return n; } else { return n(); } }
example 1 2 3 4 5 6 function sayHello (person: string ) { return 'Hello, ' + person; } let user = 'Tom' ;console .log(sayHello(user));