typeScript接口和枚举

53 阅读2分钟

在 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'