打字稿很新,我正在尝试完成一些似乎可以在执行之前进行计算但无法实现打字的事情。
我将尝试举例说明: 在下面的代码中,我想要的是一个具有强制实参的接口,该实参具有与该接口中定义的函数所使用的类型相同的类型。 到目前为止,这很容易,我可以使用泛型来实现它:
interface Interface<T> {
arg: T
func: (_: T) => string
}
然后我想要的是能够拥有一个这些接口的数组,这些接口之间可以具有不同的类型(同时仍要确保其中一个接口的参数和函数之间具有相同的类型)。 /> 这是一个带有这样一个参数的函数:
const mainFunc = <T>(
items: Array<Interface<T>>
) => {
items.forEach(({ func, arg }) => func(arg))
}
一旦我调用它,它就可以在所有接口都使用相同类型的情况下起作用:
mainFunc([
{ arg: 'abc', func: _ => typeof _ }, // string typed Interface
{ arg: 'def', func: _ => typeof _ }, // string typed Interface
])
但是如果接口使用了不同的类型,则失败:
mainFunc([
{ arg: 2, func: _ => typeof _ }, // number typed Interface
{ arg: 'abc', func: _ => typeof _ }, // string typed Interface
])
告诉我类型字符串与类型编号不兼容。
我知道类型number
是由第一行推断出的,然后它破坏了第二行。
有没有办法在内部使用相同类型的接口数组,而在它们之间使用不同的类型?
感谢大家的阅读和回复;)
(请打扰我的英语)
Seb