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; // 8
myFavoriteNumber = 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
```typescript
function 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;
}
}