如何通过前一个参数的值来推导函数参数的类型



使用typescript,我希望编译器/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中的对应类型。

相关内容

最新更新