【问题标题】:Typescript - Default parameters on class with interfaceTypescript - 具有接口的类的默认参数
【发布时间】: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");

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

【问题讨论】:

    标签: interface arguments typescript default-value


    【解决方案1】:

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

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

    【讨论】:

    • 哦,我认为这已被删除以支持最近版本之一中的默认值。所以我可以使用接口中的可选参数和类中的默认值参数吗?
    • 您仍然可以在任何地方使用没有默认值的可选参数。唯一不允许的是冗余语法 x ?= 4 - 您可以使用 ? 或默认值。
    • 请注意,如果您调用SomeMethod('foo','bar')arg3 参数将是undefined,而不是null
    • 此外,如果您有一个可选参数,那么所有以下参数也必须是可选的。所以arg4: boolean是不允许的。
    猜你喜欢
    • 2019-12-27
    • 2017-03-09
    • 2020-03-27
    • 1970-01-01
    • 2016-05-06
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多