例如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
答案 0 :(得分:2)
使用类型参数告诉TypeScript有关约束的信息。
function test<K extends keyof A>(name: K, value: A[K]) {}
区别在于,在以上定义中,我们在两个地方都使用完全相同的键。可以是book
两次,也可以是math
—两次。
在您的原始代码中,keyof A
表示两个之一。然后,typeof name
指向同一事物keyof A
,它是book
或math
的并集。这意味着允许有4种组合,因为有两个自由度。