Typescript构造函数的默认值

时间:2013-09-14 14:31:08

标签: typescript

constructor(
      public templateHeaderRow = 'DefaultTableHeaderTemplate',
      public templateBodyRow = 'DefaultTableRowTemplate',
      private templateBase = _templateBase) {

          require([this.templateBase + templateHeaderRow + '.html', this.templateBase+ templateBodyRow + '.html'], () => console.log('fdsfdsdfsf'));
}

然后我这样称呼它:log = new ListViewBase(undefined,'LoggingTableRowTemplate');

(undefined,'似乎有些愚蠢。谁能提出不同的设计呢?

什么会很好,就像在C#中我可以做(parametername:value, another:value2),并且顺序对于可选参数无关紧要。但是在打字稿中没有找到类似的东西。

更新

替代方案我这样做:

public templateHeaderRow = 'DefaultTableHeaderTemplate';
public templateBodyRow = 'DefaultTableRowTemplate';
private templateBase = _templateBase;

constructor(configuration? : ListViewBaseConfiguration) {
    if (typeof configuration !== "undefined") {
        if (typeof configuration.templateBase !== "undefined")
            this.templateBase = configuration.templateBase;
        if (typeof configuration.templateBodyRow !== "undefined")
            this.templateBodyRow = configuration.templateBodyRow;
        if (typeof configuration.templateHeaderRow !== "undefined")
            this.templateHeaderRow = configuration.templateHeaderRow;
    }


    require(['template!' + this.templateBase + this.templateHeaderRow + '.html',
        'template!' + this.templateBase + this.templateBodyRow + '.html']);
}

但我必须编写更多代码来获取某些参数可以设置而其他参数不能设置的行为。

1 个答案:

答案 0 :(得分:2)

我无法真正添加你已经知道的内容。

如果您在参数上使用默认值,最好的选择是按可能性对它们进行排序,即最有可能首先进行排序。

如果首先获得默认值,则传递对象可能会稍微麻烦,例如:

var config = MyClass.GetConfig(); // static method call
config.templateBodyRow = 'Not Default';

然后,您可以合理地期望对象中的所有值都传递给构造函数。

另一种选择可能是JavaScript相当于null-coalesce:

this.templateBodyRow = config.templateBodyRow || 'DefaultBodyRowTemplate';

它比你的版本短。

这只是一个选项 - 在没有命名参数的情况下,你选择了最好的一组!