我想做这样的事情:
type Item<T> = T & {
func: (v: T) => void
}
function a<What>(...items: Item<What>[]) {}
a({
name: "",
func: (v: {name: string}) => {}
}, {
count: 0,
func: (v: {count: number}) => {}
})
然而上面的代码会导致一个错误,如何用typscript做类似的事情?
我想做这样的事情:
type Item<T> = T & {
func: (v: T) => void
}
function a<What>(...items: Item<What>[]) {}
a({
name: "",
func: (v: {name: string}) => {}
}, {
count: 0,
func: (v: {count: number}) => {}
})
然而上面的代码会导致一个错误,如何用typscript做类似的事情?
3条答案
按热度按时间xdyibdwo1#
我几乎有它,但我不能得到功能来推断自己的通用,但我分享这无论如何,以防别人可能会解决它,或在情况下,这有助于你。
我使用的技巧是递归地推断
What
的每个项目,这样What
就被正确地处理为元组,并且项目约束被分别应用于What
中的每个元素。Playground
ncecgwcz2#
您可以使用如下语法:
Map类型可以用来Map
items
中的每个元素。T[K]
总是表示当前元素,所以我们可以使用它来使自身与函数对象相交。对于函数的实现,我建议将所有复杂的泛型内容放在重载中,并为实现函数使用更简单的签名。
Playground
xeufq47z3#