动态返回类型

时间:2019-04-21 14:41:44

标签: typescript

我编写了一个util函数,该函数返回一个具有我提供的属性名称的对象。

function example(fieldName: string) {
    return {
        [fieldName]: 'Value',
    };
}

我需要为此声明一个返回类型,但是正如您所猜测的,返回类型取决于给定的fieldName参数。

应该是这样的。当我将示例作为参数发送时,其返回类型应为

{
    example: string;
}

1 个答案:

答案 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