Как инициализировать и вернуть объект в одну строку

Я пытаюсь создать объекты 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 ответа

Решение

Ты почти там:

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, поэтому as синтаксис является предпочтительным.

Вы могли бы использовать приведение машинописи:

const options = [1, 2, 3].map<Option>((t) => <Option>{ label: String(t), value: String(t) } );
Другие вопросы по тегам