如何在一行中初始化和返回一个对象

时间:2016-11-02 06:29:57

标签: javascript typescript lambda object-initialization

我正在尝试基于以下类型化接口创建Option对象:

interface Option {
    /** Text for rendering */
    label: string;
    /** Value for searching */
    value: string | number;
    /**
     * Allow this option to be cleared
     * @default true
     */
    clearableValue?: boolean;
}

是否可以将以下内容转换为一行?

const options = [1, 2, 3].map<Option>((t) => {
    const option: Option = { label: String(t), value: String(t) };
    return option;
});

我试过了:

const options = [1, 2, 3].map<Option>((t) => Option = { label: String(t), value: String(t) });

但它没有用。

2 个答案:

答案 0 :(得分:1)

你几乎就在那里:

const options = [1, 2, 3].map(t => <Option>{ label: String(t), value: String(t) });

类型断言<Option>{ label: String(t), value: String(t) }也可以使用as运算符完成:t => ({ label: String(t), value: String(t) }) as Option

更新:正如您已经发现的那样 - 第一个选项(<Option>)会在 * .tsx 文件中产生歧义,因此{{ 1}}语法是首选。

答案 1 :(得分:0)

您可以使用打字稿{{3}}:

const options = [1, 2, 3].map<Option>((t) => <Option>{ label: String(t), value: String(t) } );