接口中的TypeScript可选功能


98

是否可以在带有可选功能的TypeScript中创建接口?

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

}

2
我找到了答案,我认为可以实现这样的可选功能:validation ?:(any)=> boolean;
安东·塞林2014年

Answers:


193

当前,TypeScript允许在接口中进行函数声明的三种语法:

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

validation: {(flag: any): boolean};

或使用较新的语法:

validation(flag: any) : boolean;

或替代方法是:

validation: (flag: any) => boolean;

解:

因此,使用旧语法使其成为可选项很容易:

validation?: {(flag: any): boolean};

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

validation?(flag: any) : boolean;

或使用第三种语法(如您所见):

validation?: (flag: any) => boolean;

3
您编写它的方式any不是类型,而是隐式为type的参数名称any。即使在接口上也必须命名参数。如果启用--noImplicitAny,则此代码将无法编译。它应该是这样的:合理的参数名称validation?:(whatever:any) => boolean;在哪里whatever
NYCdotNet 2014年

@NYCdotNet:是的,我不应该原样阅读。已更正:)
编码

@ gone-coding嗨!我如何知道该函数是否已定义?
伊兰·奥尔基斯

1
@IlanOlkies:用相同的方式测试JavaScript中的任何内容if (object.validation):)它需要针对对象上下文,因此if (this.validation)根据您的情况也可能适当。
去编码
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.