typescript 接口

属性接口

interface SquareConfig

   {

    color?: string;

    width?: number;

      }

function createSquare(config: SquareConfig): { color: string; area: number } { // ... }

let mySquare = createSquare({ colour: "red", 100 });

这个例子会报错,原因是:

如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误。

其中,colour:red 就不包含在目标类型中,会报错

解决方式1:使用类型断言:可以在后面加 as SquareConfig 即可。如:

let mySquare = createSquare({ colour: "red",  100 } as SquareConfig);

解决方式2:将这个对象赋值给一个另一个变量: 因为squareOptions不会经过额外属性检查,所以编译器不会报错。

let squareOptions = { colour: "red", 100 };

let mySquare = createSquare(squareOptions);

解决方式3:字符串索引签名

interface SquareConfig {

  color?: string;

  width?: number;

  [propName: string]: any;

}

函数接口

它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。

interface SearchFunc {

  (source: string, subString: string): boolean;

}

这样定义后,我们可以像使用其它接口一样使用这个函数类型的接口。 下例展示了如何创建一个函数类型的变量,并将一个同类型的函数赋值给这个变量。

let mySearch: SearchFunc;

mySearch = function(source: string, subString: string) {

   let result = source.search(subString); return result > -1;

}

函数的参数名不需要与接口里定义的名字相匹配

如上,也可以使用

let mySearch: SearchFunc;

mySearch = function(src: string, sub: string): boolean {

  let result = src.search(sub); return result > -1;

}

原文地址:https://www.cnblogs.com/maochunyan/p/9578076.html