接口中的 TypeScript 可选函数

Posted

技术标签:

【中文标题】接口中的 TypeScript 可选函数【英文标题】:TypeScript Optional function in Interface 【发布时间】:2015-02-15 20:19:30 【问题描述】:

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

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


【问题讨论】:

我找到了答案,我认为有可能实现这样的可选功能:validation?: (any) => boolean; 【参考方案1】:

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

使用您的 validation 函数示例,该函数采用 1 个参数(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;

【讨论】:

按照您的编写方式,any 不是类型,而是隐式类型为 any 的参数的名称。参数必须命名,即使在接口上也是如此。如果启用了 --noImplicitAny,此代码将无法编译。它应该是这样的:validation?:(whatever:any) => boolean; 其中whatever 是一些合理的参数名称。 @NYCdotNet:是的,我不应该把原来的 as-read 拿走。更正:) @gone-coding 嗨!我如何知道函数是否已定义? @IlanOlkies:与您在 javascript if (object.validation) 中测试任何内容的方式相同:) 它需要针对对象上下文,因此 if (this.validation) 也可能适合您的具体情况。

以上是关于接口中的 TypeScript 可选函数的主要内容,如果未能解决你的问题,请参考以下文章

将 Typescript 接口中的所有属性设为可选

TypeScript类型断言数组的类型函数的类型

如何将可选参数传递给typescript中的回调函数

TypeScript 可选属性不接受未定义的值

TypeScript 接口可选属性和返回类型

TypeScript中的实用工具类型(Utility Types)