接口

接口就是用代码描述一个对象必须有什么属性(包括方法),但是有没有其他属性就不管了

interface LabelledValue {
  label: string;
}

function printLabel(labelledObj: LabelledValue) {
  console.log(labelledObj.label);
}
// 我们传入的对象参数实际上会包含很多属性,但是编译器只会检查那些必需的属性是否存在,并且其类型是否匹配。
let myObj = {size: 10, label: "Size 10 Object"}; 
printLabel(myObj);

对象字面量会被特殊对待而且会经过 额外属性检查
如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误

interface LabelledValue {
  label: string;
}

function printLabel(labelledObj: LabelledValue) {
  console.log(labelledObj.label);
}

printLabel( {size: 10, label: "Size 10 Object"}); // 会报错

绕开这些检查非常简单。 最简便的方法是使用类型断言:

printLabel( {size: 10, label: "Size 10 Object"} as LabelledValue);

或者添加一个字符串索引签名

interface LabelledValue {
  label: string;
  [propName: string]: any; //这我们要表示的是LabelledValue可以有任意数量的属性
}
可选属性
interface SquareConfig {
  color?: string;
  width?: number;
}
只读属性
interface Point {
    readonly x: number;
    readonly y: number;
}
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!

TypeScript具有ReadonlyArray<T>类型,它与Array<T>相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改:

let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
ro[0] = 12; // error!
ro.push(5); // error!
ro.length = 100; // error!
a = ro; // error!

接口描述函数类型

interface SearchFunc {
  (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
  let result = source.search(subString);
  return result > -1;
}

当函数类型有属性时


微信图片_20210224165232.png

类类型

TypeScript也能够用它来明确的强制一个去符合某种契约

interface ClockInterface {
    currentTime: Date;
}

class Clock implements ClockInterface {
    currentTime: Date; // 类必须含有currentTime属性
    constructor(h: number, m: number) { }
}

继承接口

interface Animal {
  move():void;
}
interface Human extends Animal { // 可继承多个,用逗号分隔
  name: string;
  age: number;
}
let simon: Human = {
  name: 'simon',
  age: 19,
  move() {
    console.log('我在动')
  }
}
simon.move() // 我在动
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类...
    年轻人多学点阅读 306评论 0 2
  • 介绍 TypeScript 的核心原则之一是对值所具有的结构进行类型检查。它有时被称做 鸭式辨型法 或 结构性子类...
    24KBING阅读 234评论 0 0
  • 介绍 TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类...
    凌统丶阅读 488评论 0 1
  • TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”...
    2o壹9阅读 644评论 0 48
  • 接口 TypeScript 的核心原则之一是对值所具有的结构进行类型检查。它有时被称做“鸭式辨型法”或“结构性子类...
    罗彬727阅读 292评论 0 0