TypeScript的核心原则之一:对值所具有的 结构 进行类型检查
接口的作用:为这些类型命名,为代码定义契约

接口初探

  1. //必须包含一个label属性且类型为string:
  2. interface LabelledValue {
  3. label: string;
  4. }
  5. function printLabel(labelledObj: LabelledValue){
  6. console.log(labelledObj.label);
  7. }
  8. let myObj = {size: 10, label: "Size 10 Object"};
  9. printLabel(myObj);

LabelledValue接口就好比一个名字,用来描述上面例子里的要求。 它代表了有一个 label属性且类型为string的对象。

可选属性 color? : string

接口里的属性不全都是必需的。 可选属性在应用“option bags”模式时很常用,即给函数传入的参数对象中只有部分属性赋值了。

只读属性

一些对象属性只能在对象刚刚创建的时候修改其值

  1. interface Point {
  2. readonly x: number;
  3. readonly y: number
  4. }
  5. let p1: Point = { x: 10, y: 20 };
  6. p1.x = 5; // error!

readonly vs const

判断改用readonly还是const:是看要把它作为一个变量还是作为一个属性。作为变量用const,作为属性用readonly