问题描述
使用打字稿,我希望编译器/ IDE尽可能推断出参数的类型。我该如何运作? 我函数的第一个参数是一个字符串,它的值将决定可以作为第二个参数传递的数据的类型。但我无法做到这一点。我正在分享我希望编译器在这种情况下可以工作的方式,但对我没有帮助。
interface AuxType {
name: string,user: number
}
type ValueType = AuxType[keyof AuxType]
function run(key: string,value: ValueType) {
return dostuff(key,value)
}
run('name',"Stack") // Works as expected
run('user',2) // Works as expected
run('name',2) // Expecting this to error but it is not
run('user',"Stack") // Expect this to error but it works in typescript
解决方法
您需要使用泛型。现在,您只是将ValueType定义为名称和用户类型(即string | number
)的并集,但它与实际将哪个键传递给函数无关。要使键和值依赖,您需要在函数中使用泛型,例如:
function run<T extends keyof AuxType>(key: T,value: AuxType[T]) {
return dostuff(key,value)
}
现在,密钥必须是AuxType的密钥(即extends
正在做的事情),并且值必须是AuxType中该密钥的相应类型。