TypeScript Interface中的可选功能

Ant*_*lin 71 javascript typescript

是否可以使用可选功能在TypeScript中创建接口?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}
Run Code Online (Sandbox Code Playgroud)

Gon*_*ing 135

TypeScript目前有三种语法允许接口中的函数声明:

使用一个带有validation1个参数(any类型)和boolean返回值的函数示例:

validation: {(flag: any): boolean};
Run Code Online (Sandbox Code Playgroud)

或者在较新的语法中:

validation(flag: any) : boolean;
Run Code Online (Sandbox Code Playgroud)

或者替代方案是:

validation: (flag: any) => boolean;
Run Code Online (Sandbox Code Playgroud)

解:

所以使用旧语法使其可选是很容易的:

validation?: {(flag: any): boolean};
Run Code Online (Sandbox Code Playgroud)

使用第二种语法(最近添加 - 感谢@toothbrush)

validation?(flag: any) : boolean;
Run Code Online (Sandbox Code Playgroud)

或者在第三种语法中(如您所见):

validation?: (flag: any) => boolean;
Run Code Online (Sandbox Code Playgroud)

  • @IlanOlkies:与在 JavaScript 中测试任何内容的方式相同 `if (object.validation)` :) 它需要针对对象上下文,因此 `if (this.validation)` 也可能适合您的情况。 (4认同)
  • 你编写它的方式,`any`不是一个类型,而是一个隐含式为"any"的参数的名称.即使在接口上也必须命名参数.如果启用了--noImplicitAny,则此代码将无法编译.它应该是这样的:`validation?:( whatever:any)=> boolean;`其中`whatever`是一些合理的参数名. (3认同)