使用通用字符串作为对象的键

时间:2019-05-28 02:01:37

标签: typescript

我想定义一个对象O,该对象在某个类型参数T extends string上具有通用性,以使对象O始终具有值为{{1}的键}。

T

这是我尝试过的方法,但是由于type O<T extends string> = { [t in T]: string }; function f<T extends string>(t: T, o: O<T>) { const x = o[t]; return x === "hello"; } let s = f("a", { a: "" }) if (s === "Hello") { } 不能推断为字符串,因此它实际上不起作用。这意味着最后一个O[T]出错,因为TypeScript的比较将始终为if

TypeScript Playground Link

1 个答案:

答案 0 :(得分:1)

O[T]不会直接显示为string,但出于所有意图和目的,它的行为都将是string

type O<T extends string> = { [t in T]: string };

function f<T extends string>(t: T, o: O<T>) {
    let x = o[t];
    let s: string = x; // assignable to string 
    x = "S" // string can be assigned to it
    return x;
}
let s: string = f("a", {a: ""}) // outside it is string