我想定义一个对象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
。
答案 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