Как инициализировать и вернуть объект в одну строку
Я пытаюсь создать объекты 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) } );