Typescript 为什么泛型类型参数T";“未知”;在返回类型中?如何键入此函数以正确推断返回类型?
typescript手册()对一般约束作了如下说明: 可以声明受其他类型约束的类型参数 参数 在这个精心设计的示例中,如何正确推断wrap()返回类型中的“T”Typescript 为什么泛型类型参数T";“未知”;在返回类型中?如何键入此函数以正确推断返回类型?,typescript,typescript-generics,Typescript,Typescript Generics,typescript手册()对一般约束作了如下说明: 可以声明受其他类型约束的类型参数 参数 在这个精心设计的示例中,如何正确推断wrap()返回类型中的“T” function wrap<T, F extends (() => T)>(cb: F): [T, F] { return [cb(), cb] } function load(): string { return '' } const [ value, // unknown, should be s
function wrap<T, F extends (() => T)>(cb: F): [T, F] {
return [cb(), cb]
}
function load(): string {
return ''
}
const [
value, // unknown, should be string. Can I get typescript to infer this?
wrapped, // () => string
] = wrap(load)
函数包装T)>(cb:F):[T,F]{
返回[cb(),cb]
}
函数加载():字符串{
返回“”
}
常数[
值,//未知,应该是字符串。我可以用typescript来推断吗?
已包装,//()=>字符串
]=包裹(装载)
Typescript无法从类似于func T)的构造中推断T
。在这种情况下,通常最好依靠它。例如,我们可以使用实用程序类型,它在内部使用推断
,并完全满足我们的需要:
function wrap<F extends (() => any)>(cb: F): [ReturnType<F>, F] {
return [cb(), cb]
}
function load(): string {
return ''
}
const [
value, // string
wrapped, // () => string
] = wrap(load)
function wrap any)>(cb:F):[ReturnType,F]{
返回[cb(),cb]
}
函数加载():字符串{
返回“”
}
常数[
值,//字符串
已包装,//()=>字符串
]=包裹(装载)
Typescript无法从类似于func T)的构造中推断T
。在这种情况下,通常最好依靠它。例如,我们可以使用实用程序类型,它在内部使用推断
,并完全满足我们的需要:
function wrap<F extends (() => any)>(cb: F): [ReturnType<F>, F] {
return [cb(), cb]
}
function load(): string {
return ''
}
const [
value, // string
wrapped, // () => string
] = wrap(load)
function wrap any)>(cb:F):[ReturnType,F]{
返回[cb(),cb]
}
函数加载():字符串{
返回“”
}
常数[
值,//字符串
已包装,//()=>字符串
]=包裹(装载)
通用T
是否确实需要?您可以使用ReturnType
我认为表达这一点的最简单方式是函数包装(cb:()=>T):[T,()=>T]{return[cb(),cb]}
。泛型T
确实必要吗?您可以使用ReturnType
我认为最简单的表达方式是函数包装(cb:()=>T):[T,()=>T]{return[cb(),cb]}
。