1. 安装ts
安装
npm install -g typescript
编译
tsc demo.ts (react 后缀 tsx)
2. 基础
1. 原始数据类型
布尔值
let isDone:boolean = true
数值
let money:number = 1000
字符串
let name:string = 'wuyanbin'
空值 void (没有任何返回值的函数)
function alertName():void{alert('aaa');}
let unusable:void = undefined
- Null 和 Undefined
let u:undefined = undefined;let n:null = null;
2.任意值
声明为any类型的变量,允许赋值任意类型
3.类型推论(type inference)
如果没有明确的指定类型,TS会根据 type inference 规则推断出一种类型
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成any类型而完全不被类型检查
let anyType;anyType = 'wuyanbin';anyType = 12;
4.联合类型(union type)
表示取值可以是多种类型中的一种
联合类型,只能访问两者共用的属性或者方法
let myFavoriteNumber: string | number;myFavoriteNumber = 'wuyanbin'myFavoriteNumber.length; // 8myFavoriteNumber = 9;myFavoriteNumber.length; // error
5.对象的类型 — 接口(interfaces)
使用接口来定义对象的类型。
interface IPerson {readonly id:number; // 只读属性(不可更改🙅)name: string;age: number; // 确定属性gender? : number; // 可选属性[propName: string]: any; // 任意属性(确定属性和可选属性必须是任意属性的子集合)}let tjl: IPersion {name: 'tjl',age: 25,}let wyb: IPersion {name: 'wyb',age: 25,gender: 1,}
6.数组的类型
类型 + 方括号 表示法
let arr:number[] = [1,2,3]
数组泛型(Array Generic) Array
let arr:Array<number> = [1,2,3]
接口表示数组 ```typescript interface NumberArray {
[index: number]: number
} let selfArr:NumberArray = [1,2,3];
类数组(Array-like Object)像数组,但是不具备数组的方法属性等,如函数的形参数 arguments```typescriptfunction sum(){let args: IArguments = arguments;}
7.函数的类型
函数声明(Function Declaration)
function sum(x:number, y:number):number{return x + y;}
函数表达式(Function Expression)
let mySum = function(x:number, y:number):number{return x + y;}// 虽然能通过编译,但是实际上等号左侧的 类型是根据类型推论推倒出来的
实际应该写成如下形式:
let mySum: (x:number,y:number) => number = function(x:number, y:number):number{return x + y;}
接口定义函数的形式
interface SearchFunc {(source: string, substring: string): boolean;}let mySearch:SearchFunc;mySearch = function(source: string,substring: string){return source.search(sunstring) !== -1;}
可选参数(?)
必填参数一定要放在可选参数之前。
- 参数默认值
function buildName(firstName: string, lastName: string = 'Cat'){return firstName + '' + lastName;}
剩余参数(…rest)
function push(array:any[], ...items:any[]){items.forEach(function(item){array.push(item);})}let a = [];push(a,1,2,3);
重载
重载允许一个函数接受不同数量或者类型的参数时,作出不同的处理。
function reverse(x:number):number;function reverse(x:string):string;function reverse(x:number | string):number | string {if(typeof x == 'number'){return Number(x.toString().split('').reverse().join(''));}else if(typeof x == 'string'){return x.split('').reverse.join('');}}
8.类型断言(type Assertion)
类型断言用来手动的指定一个值的类型code <类型>值 或者 值 as 类型
function getLength(something:string | number):number{if((<string>something).length){return (<string>something).length; // 或者 something as string}else {return something.toString().length;}}
