繁体   English   中英

TypeScript 不会推断对象中的回调返回类型

[英]TypeScript does not infer callback return type in an object

在这种情况下,TypeScript 可以正确推断类型,而无需我明确给出类型。

function myFunction<T>(callback: () => T) {
     return callback();
}

const result = myFunction(() => 5); //TypeScript knows that "result" type is a Number.

但它在对象内部不起作用,TypeScript 强制我显式提供类型。

type MyObject<T> = {
    callback: ()=>T
}

const myObject: MyObject = { //Error happens, the compiler ask for a type here.
    callback: ()=>5
}

但是编译器应该知道“回调”是一个返回数字的函数。 有没有办法来解决这个问题?

TypeScript 目前没有像调用泛型函数时那样在泛型类型中推断类型参数的概念。 microsoft/TypeScript#26242有一个功能请求,如果实现,将允许使用一些印记来告诉编译器推断特定类型参数。 因此,也许在未来的某一天,您可以编写const myObject: MyObject<infer> =...const myObject: MyObject<*> =...甚至const myObject: MyObject =...和得到你正在寻找的行为。 但现在它不是语言的一部分。

现在获得这种行为的唯一方法是使用返回其输入的通用辅助身份函数:

const asMyObject = <T,>(m: MyObject<T>) => m;

因此,您可以编写const myObject = asMyObject(...)而不是const myObject: MyObject =...并获得相同的效果:

const myObject = asMyObject({
    callback: () => 5
});

// const myObject: MyObject<number>

这里编译器在调用asMyObject()时推断Tnumber ,因此从asMyObject()返回的值是MyObject<number>类型,因此myObject变量也是。

游乐场代码链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM