在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型。
什么是接口
在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。
interface typeObj {
address: string,
run(): void
}
//限制对象
let obj: typeObj = {
address: '北京',
run() {
return 111
}
}
定义的变量如果少了会报错,多了也会报错
// index.ts(6,5): error TS2322: Type '{ address: string; }' is not assignable to type 'typeObj'. // Property 'run' is missing in type '{ address: string; }'
上面的例子中,我们定义了一个接口 typeObj(后面不加等号),接着定义了一个变量 obj,它的类型是 typeObj。这样,我们就约束了 obj 的形状必须和接口 typeObj 一致。
type typeObj = {
address: string,
age: number
}
interface typeObj {
address: string,
age: number
}
//限制类
class Father implements typeObj {
address: string;
age: number
constructor(address:string,age: number) {
this.address =address;
}
}
let f1 = new Father('北京',123);
console.log(f1);
上面的例子中,我们定义了一个接口 typeObj(后面不加等号,可以用interface和type),接着定义了一个类 Father,它的类型需要用implements typeObj。这样,我们就约束了 Father 的形状必须和接口 typeObj 一致
枚举
1. 数字枚举
TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚举就是一个字典。枚举类型使用enum来定义:
enum obj {
top,
down4,
left,
right,
}
上面定义的枚举类型的obj,TypeScript会为它们每个值分配编号,默认从0开始,在使用时,就可以使用名字而不需要记数字和名称的对应关系了
enum obj {
top = 1,
down = 2,
left = 3,
right = 4,
}
// xxx帮我们找到枚举定义的属性
function render(xxx : obj) {
console.log(obj);
}
可以对一个字段指定一个索引值,那他后面没有指定索引值的就会依次加一,跟对象类似但是不能加等号,赋值需要加等号
2. 字符串枚举
TypeScript 将定义值是字符串字面量的枚举称为字符串枚举,字符串枚举值要求每个字段的值都必须是字符串字面量,或者是该枚举值中另一个字符串枚举成员:
// 使用字符串字面量
enum Message {
Error = "Sorry, error",
Success = "Hoho, success"
}
console.log(Message.Error); // 'Sorry, error'
// 使用枚举值中其他枚举成员
enum Message {
Error = "error message",
ServerError = Error,
ClientError = Error
}
console.log(Message.Error); // 'error message'
console.log(Message.ServerError); // 'error message'