#typescript
#typescript
Вопрос:
Я пишу функцию util, которая возвращает объект с именем свойства, которое я предоставил.
function example(fieldName: string) {
return {
[fieldName]: 'Value',
};
}
Мне нужно объявить тип возвращаемого значения для этого, но, как вы догадываетесь, его возврат зависит от заданного параметра fieldName.
Это должно быть что-то вроде этого. Когда я отправляю пример в качестве параметра, возвращаемый тип должен быть таким
{
example: string;
}
Ответ №1:
Вам нужен параметр типа, чтобы фиксировать буквальный тип передаваемой строки. С помощью этого вы можете использовать Record
для создания типа с этим ключом и определенным типом значения:
function example<K extends string>(fieldName: K): Record<K, string> {
return {
[fieldName]: 'Value',
};
}
let e = example("foo");
e.foo //ok
e.notFoo //err
Это сработает, если переданный аргумент является строковым литералом или чем-то еще, имеющим тип строкового литерала. Если тип аргумента string
, вы не получите никакой проверки типа:
let k = "foo" as string;
let e = example(k); // Record<string, string>
e.foo //ok
e.notFoo //still ok