Typescript - 具有接口的类的默认参数

Posted

技术标签:

【中文标题】Typescript - 具有接口的类的默认参数【英文标题】:Typescript - Default parameters on class with interface 【发布时间】:2013-09-09 12:19:48 【问题描述】:

我有一个场景,我有一个接口,它的方法如下:

interface SomeInterface

   SomeMethod(arg1: string, arg2: string, arg3: boolean);

还有这样的课程:

class SomeImplementation implements SomeInterface

   public SomeMethod(arg1: string, arg2: string, arg3: boolean = true)...

现在的问题是我似乎无法告诉界面第三个选项应该是可选的或具有默认值,就好像我试图告诉界面有一个默认值我得到错误:

TS2174: Default arguments are not allowed in an overload parameter.

如果我从界面中省略默认值并像这样调用它:

var myObject = new SomeImplementation();
myObject.SomeMethod("foo", "bar");

它抱怨参数不匹配任何覆盖。那么有没有办法能够为参数设置默认值并从接口继承,我不介意接口是否也必须将值设为默认值,因为它始终是可选参数。

【问题讨论】:

【参考方案1】:

您可以使用? 将参数定义为可选:

interface SomeInterface 
     SomeMethod(arg1: string, arg2: string, arg3?: boolean);

【讨论】:

哦,我认为这已被删除以支持最近版本之一中的默认值。所以我可以使用接口中的可选参数和类中的默认值参数吗? 您仍然可以在任何地方使用没有默认值的可选参数。唯一不允许的是冗余语法 x ?= 4 - 您可以使用 ? 或默认值。 请注意,如果您调用SomeMethod('foo','bar')arg3 参数将是undefined,而不是null 此外,如果您有一个可选参数,那么所有以下参数也必须是可选的。所以arg4: boolean是不允许的。

以上是关于Typescript - 具有接口的类的默认参数的主要内容,如果未能解决你的问题,请参考以下文章

与接口同名的 TypeScript 类

一个人在咖啡里默默的打总结。

Typescript中的类

TypeScript 中的类和接口

Xamarin MVVMCross:注册具有多个接口的类的单例

具有引用数据成员的类的默认构造函数?