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

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...