在Typescript中的构造函数中的内联函数

时间:2017-03-28 09:16:07

标签: typescript

我将响应转换为这样的类:

private mapSingle(response: SingleResponse): CodeExample {
    var authorResponse = response.modular_content[response.item.elements.author.value as string];
    var author = new Author(authorResponse.system, authorResponse.elements.name.value, authorResponse.elements.image.value);
    return new CodeExample(
        response.item.system,
        response.item.elements.code.value,
        author,
        response.item.elements.versions.value as CodeExampleCategory[],
        response.item.elements.title.value,
        response.item.elements.versions.value as CodeExampleVersion[]
    );
}

即使这完全正常,我也希望有更好的方法来做到这一点,这样我就不需要在构造函数之前声明 author 响应。理想情况下,我想将自己的函数放在构造函数中并解决这个问题" inline"。这可能吗?

1 个答案:

答案 0 :(得分:1)

从你的编码风格来看,我的猜测是你在之前没有之前有过使用javascript的经验。如果我错了,我道歉。我说这个的原因是因为其他语言的开发人员能够通过使用不同的方法签名来重载他们的构造函数/方法,但在typescript / javascript中,情况并非如此。

  

理想情况下,我想将自己的函数放在构造函数中并解析此“内联”。这可能吗?

如果这不直接回答你的问题,我很抱歉,但我的直觉告诉我你可能想通过重载你的构造函数来解决你的问题。由于打字稿/ javascript,不允许你这样做,还有另一个'模式'/'最佳实践',使构造函数接受configuration object而不是许多参数。

因此,要将所有内容绑定在一起,而不是让构造函数接受许多参数,构造函数应该接受一个配置对象。您可以为此选项声明带有可选参数的interface,然后使用对象文字来满足接口。

interface CodeExampleOptions {
    requiredParam: string,
    someOptionalParam?: string,
    authorResponse?: Author
}

class CodeExample {
    constructor(options: CodeExampleOptions) {
        // do something with options
        if (options.authorResponse !== undefined) {
            // do something with the authorResponse 
        }
    }
}

// now your method could look something like this.
private mapSingle(response: SingleResponse): CodeExample {
    return new CodeExample({
        // someOptions: 'some values',
        authorResponse: response.modular_content[response.item.elements.author.value as string],
        // someOtherOptions: 'some other values'
    });
}

这就是我想要在打字稿中'重载构造函数'的方法,如果这是你希望的那样。

希望有所帮助!