TypeScript 基础类型
Boolean 类型
Number 类型
String 类型
Enum 类型
undefined和null
any 类型
void 类型
无效的 undefinded
never 类型
用不存在的值
TypeScript 复杂类型
object、Object 、{} 类型
- object
let obj:object;
obj = {}; // 正确
obj = 1; // 错误
obj = 2; // 错误
- Object、{}
所有原始类型、非原始类型都可以赋给 Object
let obj:Object;
// 以下都正确
obj = 1; ;
obj = 'abc';
obj = 'true';
obj = {};
类
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
sayHi(): void {
console.log(`Hi, ${this.name}`);
}
}
Array 类型
const flag1: number[] = [1, 2, 3];
const flag2: Array<number> = [1, 2, 3];
Tuple类型
表示一个已知数量和类型的数组,可以理解为他是一种特殊的数组
const tuple: [number, string] = [1, "zhangmazi"];
函数
function add(x: number, y: number): number { return x + y; }
可选参数
function add(x: number, y?: number): number { return x + y; }
默认参数
function add(x: number, y: number=1): number { return x + y; }
剩余参数
function add(...number:[]): number { return x + y; }
函数重载
function add(x: number, y: number): number;
function add(x: string, y: string): string;
function add(x: any, y: any): any { return x + y; }
联合类型
或
let stats: string | number;
stats = "to be or not to be";
stats = 1;
交叉类型
并
interface IpersonA {
name: string;
age: number;
}
interface IpersonB {
name: string;
gender: string;
}
let person: IpersonA & IpersonB ;
person = { name: "师爷", age: 18, gender: "男" };
如果key相同但是类型不同,则该key为never类型
interface IpersonA { name: string }
interface IpersonB { name: number }
function testAndFn(params: IpersonA & IpersonB) { console.log(params) }
testAndFn({name: "黄老爷"})
// error TS2322: Type 'string' is not assignable to type 'never'.
接口
接口用来定义对象的类型。 接口是对象的状态(属性)和行为(方法)的抽象(描述)
使用关键字interface来声明接口
interface Person { name: string; age: number; }
let tom: Person = { name: 'Tom', age: 25 };
设置接口可选或者只读
只读限制只能在对象刚刚创建的时候修改其值
interface Person { readonly name: string; age?: number; }
索引签名
希望一个接口中除了包含必选和可选属性之外,还允许有其他的任意属
一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
interface Person {
name: string;
age?: number;
[prop: string]: any;
// prop字段必须是 string类型 or number类型。 值是any类型,也就是任意的
}
类型别名
type count = number | number[];
function hello(value: count) {}
接口、类型别名在对象上的扩展
接口
interface MyInterface {
name: string;
say(): void;
}
interface MyInterface2 extends MyInterface {
sex: string;
}
let person: MyInterface2 = {
name: "树哥",
sex: "男",
say(): void {
console.log("hello 啊,树哥!");
},
};
类型别名
type MyType = {
name: string;
say(): void;
};
type MyType2 = MyType & {
sex: string;
};
let value: MyType2 = {
name: "树哥",
sex: "男",
say(): void {
console.log("hello 啊,树哥!");
},
};