微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过上一个自变量的值推导函数自变量的类型?

如何解决如何通过上一个自变量的值推导函数自变量的类型?

使用打字稿,我希望编译器/ 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中该密钥的相应类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。