打字稿推断的类型不能使用

明珍阁

我试图在javascript的函数库上附加类型。

但是,当目标被评估为目标是Promise的实例之后,当我尝试实现在'then'链上应用fn(任何函数)的函数'go1'时,我遇到了一个问题

我认为没有错,有足够的线索可以得出fn的类型。

function go1<T, K>(target:T, fn:T extends Promise<infer Val> ? (val:Val)=>K : (val:T)=>K):
    T extends Promise<any>? Promise<K>: K {
    return target instanceof Promise ? target.then(fn) : fn(target) as any
}

虽然带有字符串参数的函数'go1'有效,但是当我像下面的Promise参数一样调用'go1'

const b = go1("anyString", x=>x.Lowercase()) // works; return "anystring"

const promiseString = Promise.resolve("string")
const c = go1(promiseString,x=>x.Lowercase()) // emit error 

打字稿对promiseString发出编译器错误

Argument of type 'Promise<string>' is not assignable to parameter of type 'string'.ts(2345)
_.ts(111, 19): Did you forget to use 'await'?

Mayber在条件类型Type脚本上存在一些问题。当我将条件语句从T更改为any时,它也起作用。但是我无法检查fn的参数类型

fn:T extends Promise<infer Val> ? (val:Val)=>K : (val:any)=>K
const c = go1("string",
               x=>x.Lowercase() //x is any, cannot suppose type)  
明珍阁

感谢@Hallaha,我在tsconfig.json上发现了一个问题。strictFunctionTypes选项引起问题。将其从true更改为false后,代码即可工作。

  "strictFunctionTypes": false /* Enable strict checking of function types. */,

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用打字稿推断类型的问题

来自分类Dev

为什么打字稿不能推断表达类型

来自分类Dev

必须定义打字稿类型推断不能识别值

来自分类Dev

react-admin打字稿:不能使用名称空间作为类型

来自分类Dev

打字稿联合类型推断

来自分类Dev

打字稿返回类型推断

来自分类Dev

在打字稿中使用扩展类型进行类型推断

来自分类Dev

打字稿:使用装饰器时的类型推断

来自分类Dev

为什么我不能使用打字稿为我的自定义界面扩展 HTMLElement 类型?

来自分类Dev

打字稿无法推断通用类型

来自分类Dev

打字稿吸气剂类型推断

来自分类Dev

打字稿部分类型推断

来自分类Dev

打字稿和类型推断:验证问题

来自分类Dev

打字稿:通用类类型推断

来自分类Dev

为什么在使用区分类型检查时无法打字稿推断出返回类型

来自分类Dev

为什么不能使用函数断言在打字稿中var不为null

来自分类Dev

打字稿推断联合类型而不是指定的类型

来自分类Dev

如果使用功能参数,则无法推断打字稿类型

来自分类Dev

打字稿推断问题

来自分类Dev

函数不能使用类型推断,但是我不明白为什么

来自分类Dev

打字稿:参数顺序会影响类型推断吗?

来自分类Dev

推断打字稿中嵌套的泛型类型?

来自分类Dev

为什么打字稿功能参数类型推断失败?

来自分类Dev

打字稿中的函数重载和类型推断

来自分类Dev

为什么需要打字才能使用打字稿?

来自分类Dev

为什么打字稿可以使用双重否定而不是布尔构造函数来推断非空类型?

来自分类Dev

打字稿:使用元组作为索引类型

来自分类Dev

在yup模式中使用打字稿类型

来自分类Dev

打字稿功能输出不能分配给条件类型

Related 相关文章

热门标签

归档