【发布时间】:2019-12-27 05:02:34
【问题描述】:
我想我有一个简单的问题,但我也不确定这在 TypeScript 中是否可行。
本质上我想定义一个元组类型,它有两个元素,第二个元素取决于第一个元素的值。
作为一个例子,我想创建一个类型,其中第一个元组元素是接口的键,然后将第二个元组元素绑定到该属性的类型。例如:
interface ExampleI {
a: number;
b: string;
}
const one: KeyedTuple<ExampleI> = ["a", 34]; // good
const two: KeyedTuple<ExampleI> = ["a", "not a number"]; // bad
const three: KeyedTuple<ExampleI> = ["b", 47]; // bad
我尝试执行以下操作:
type KeyedTuple<T, K extends keyof T> = [K, T[K]];
这几乎可行,但编译器只考虑K 的类型,而不考虑K 的值,所以第二个元素总是 的类型为number | string。
这可能吗?如果有,怎么做?
【问题讨论】:
标签: typescript generics types tuples