假设我希望函数input返回object第一个参数的常量类型({ ... } 而不是最接近的类型)obj。那么Ex.1就不行了,因为参数类型是object,返回类型object也是。Ex.2 将起作用,因为该参数T只需要扩展对象。
现在这里是 Ex.3 的问题,我想指定一个泛型类型,但仍然有扩展类型的参数object(而不是 type object)。我还尝试创建两个单独的函数,一个只有要显式键入的泛型类型,另一个具有要显式键入的泛型类型和 Ex.4 中扩展对象的泛型,但这不起作用,我不不知道为什么。任何想法如何解决这一问题?
tl;博士我想推断函数参数,但仍然必须选择传递泛型。
前任。1
无效,无效类型
// object
const output = input({
property: 123
})
function input(obj: object) {
return obj
}
例 2
有效,但没有额外的泛型
// { property: number }
const output = input({
property: 123
})
function input<T>(obj: T): T {
return obj
}
例 3
不起作用,错误
// [ERROR]: Expected 2 type arguments, but got 1.
const output = input<{
another: 'property'
}>({
property: 123
})
function input<T1, T2>(obj: T2): T1 & T2 {
return modify(obj)
}
例 4
无效,无效类型
// object
const output = input<{
another: 'property'
}>({
property: 123
})
function _input<T1, T2>(obj: T2): T1 & T2 {
return modify(obj)
}
function input<T1>(obj: object) {
return _input(obj)
}