如何使用keyof中的key作为另一种类型的key?

时间:2019-04-10 12:20:07

标签: typescript

例如there函数及其接口:

interface A {
  book: string;
  math: number;
}

function test(name: keyof A, value: A[typeof name]) {}

然后

test('book', 2); // is valid
test('math', 'str'); // is valid

如何设置第二个参数类型以依赖于第一个参数值?

test('book', 2); // is invalid
test('math', 'str'); // is invalid

test('book', 'str'); // is valid
test('math', 2); // is valid

1 个答案:

答案 0 :(得分:2)

使用类型参数告诉TypeScript有关约束的信息。

function test<K extends keyof A>(name: K, value: A[K]) {}

请参见TypeScript Playground

区别在于,在以上定义中,我们在两个地方都使用完全相同的键。可以是book两次,也可以是math —两次。

在您的原始代码中,keyof A表示两个之一。然后,typeof name指向同一事物keyof A,它是bookmath的并集。这意味着允许有4种组合,因为有两个自由度。