我编写了一个util函数,该函数返回一个具有我提供的属性名称的对象。
function example(fieldName: string) {
return {
[fieldName]: 'Value',
};
}
我需要为此声明一个返回类型,但是正如您所猜测的,返回类型取决于给定的fieldName参数。
应该是这样的。当我将示例作为参数发送时,其返回类型应为
{
example: string;
}
答案 0 :(得分:2)
您需要一个类型参数来捕获所传递字符串的文字类型。这样,您可以使用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