打字稿-错误的类型检查返回Promise的通用函数

阴离子

当通用功能返回Promise<T>打字稿时,类型检查失败。我做错什么了吗,在这种情况下有没有办法执行类型检查?

//Generic function
function get<T>(): Promise<T> ...

//Typed instance of function, should fail at compile-time Because T != T[]
const typedGet: <T = SomeClass>() => Promise<T[]> = get;

//Should also fail, because T != IterableIterator<T>
const typedGet2: <T = SomeClass>() => Promise<IterableIterator<T>> = get;
提香·切尔尼科娃·德拉戈米尔

考虑到Typescript类型系统的结构性质,以及在编译时删除类型的事实,我认为这不一定是有缺陷的。

让我们研究第一种情况,为签名重命名type参数,以使情况更清楚。

const typedGet: <O = SomeClass>(n: O) => Promise<O[]> = get;

get是通用的,并且返回a,Promise<T>并且Promise<O[]>由于没有其他约束T可以被分配给return函数O[]Typescript不会尝试匹配函数的各个类型参数,因此O != T这不是问题。

如果要添加参数,则讨论将有所不同:

declare function get<T>(p: T): Promise<T> 
const typedGet: <O = SomeClass>(p: O) => Promise<O[]> = get;

现在,如果我们尝试匹配返回类型,则T必须为O[],但是如果我们匹配参数类型T必须为O,则我们将无法对此进行协调,并且会出现错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章