FlowType 包装提取而不会丢失默认类型注释

米尼

我想做的是包装fetch函数以处理一些fetch样板文件,例如call .json()

但问题是,如果我将fetch函数包装在一个带有我自己注释的函数中,我会失去很多类型安全性,因为我的类型永远不会像默认情况下 Flow 附带的类型那样具体。

所以我尝试利用存在类型(*)typeof让 Flow 保留默认注释

// Imported as f because importing as "fetch"
// overwrites all of Flow's default type info about fetch
import f from 'node-fetch'

export const fetchJSON: typeof fetch =
  (url: *, opts: *): * => f(url, opts).then(r => r.json())

export const post: typeof fetchJSON = (url: *, opts: *): * => fetchJSON(url, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  ...opts
})

不幸的是,这给了我一些没有多大意义的类型错误

 10: export const post: typeof fetchJSON = (url: *, opts: *): * => fetchJSON(url, {
                                                                                  ^ object literal
 11:   method: 'POST',
               ^^^^^^ string. This type is incompatible with
824:     method?: ?MethodType;
                  ^^^^^^^^^^^ null. See lib: /private/tmp/flow/flowlib_22594590/bom.js:824

x.js:10
 10: export const post: typeof fetchJSON = (url: *, opts: *): * => fetchJSON(url, {
                                                                                  ^ object literal
 12:   headers: { 'Content-Type': 'application/json' },
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ object literal. This type is incompatible with
822:     headers?: ?HeadersInit;
                   ^^^^^^^^^^^^ null. See lib: /private/tmp/flow/flowlib_22594590/bom.js:822

x.js:10
 10: export const post: typeof fetchJSON = (url: *, opts: *): * => fetchJSON(url, {
                                                                                  ^ object literal
 12:   headers: { 'Content-Type': 'application/json' },
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ property `Content-Type`. Property not found in
822:     headers?: ?HeadersInit;
                    ^^^^^^^^^^^ Headers. See lib: /private/tmp/flow/flowlib_22594590/bom.js:822


Found 3 errors

有什么办法可以使这项工作?

米尼

我能够用更大问题的一个小得多的子集重现这个问题,我想我现在理解了这个问题,因为它与fetch自身完全无关

// @flow
const opts: RequestOptions = {}
const test = { method: 'POST', headers: { 'Content-Type': 'application/json' }, ...opts }

上面会导致类似的错误,这是因为传播opts到对象中可能会重写'POST'null,这是不允许的,因为它具有string类型。解决方案是扩展到一个新对象,而不是现有对象。所以

const test = { ...{ method: 'POST', headers: { 'Content-Type': 'application/json' } }, ...opts }

将工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flowtype-Flowtype可以自动注释变量的类型吗?

来自分类Dev

Flowtype,在类中定义类型

来自分类Dev

在flowtype中细化“ any”类型

来自分类Dev

flowtype如何使用可选字段注释联合

来自分类Dev

如何使用flowtype命令获取推断的类型数据?

来自分类Dev

React.Component状态的FlowType注释在编译时不会被删除

来自分类Dev

使用 eslint-plugin-flowtype,如何检查一个类型是否存在

来自分类Dev

flowtype: $Subtype 和 typeof 在泛型类型中使用时失败

来自分类Dev

ImmutableJS/FlowType:是否可以对 List.toJS() 返回的数组进行类型检查

来自分类Dev

Flowtype:如果类型没有匹配字段,则不相交联合区分不起作用

来自分类Dev

FlowType是否支持混入或合成?

来自分类Dev

使用 FlowType 输入特定的 ID

来自分类Dev

FlowType用于定义接口的语言是什么?

来自分类Dev

FlowType.JS无法正常工作

来自分类Dev

FlowType.JS无法正常工作

来自分类Dev

如何使用Flowtype设置React + Flux

来自分类Dev

应将Reacts的propTypes和defaultProps与Flowtype一起使用,还是Flowtype足够全面?

来自分类Dev

flowtype:PackageHeap中找不到package.json

来自分类Dev

flowtype-如何为导出函数的包声明接口?

来自分类Dev

如何使用Flowtype正确处理AngularJS $ inject批注

来自分类Dev

FlowType中的自定义解析器

来自分类Dev

flowtype:PackageHeap中找不到package.json

来自分类Dev

Flowtype / jQuery - 在函数的静态中找不到属性`datepicker` 属性

来自分类Dev

Swift不会从框架中提取NSMutableArray类型注释

来自分类Dev

Flowtype-字符串与字符串枚举不兼容

来自分类Dev

将Flowtype与react-css-modules装饰的组件一起使用

来自分类Dev

flowtype 拒绝使用 ./listentry.html 导入 html。找不到所需的模块

来自分类Dev

Flowtype 中 Typescript 的“EnumType 中的键”的等价物是什么?

来自分类Dev

包装函数而不会破坏默认参数

Related 相关文章

  1. 1

    Flowtype-Flowtype可以自动注释变量的类型吗?

  2. 2

    Flowtype,在类中定义类型

  3. 3

    在flowtype中细化“ any”类型

  4. 4

    flowtype如何使用可选字段注释联合

  5. 5

    如何使用flowtype命令获取推断的类型数据?

  6. 6

    React.Component状态的FlowType注释在编译时不会被删除

  7. 7

    使用 eslint-plugin-flowtype,如何检查一个类型是否存在

  8. 8

    flowtype: $Subtype 和 typeof 在泛型类型中使用时失败

  9. 9

    ImmutableJS/FlowType:是否可以对 List.toJS() 返回的数组进行类型检查

  10. 10

    Flowtype:如果类型没有匹配字段,则不相交联合区分不起作用

  11. 11

    FlowType是否支持混入或合成?

  12. 12

    使用 FlowType 输入特定的 ID

  13. 13

    FlowType用于定义接口的语言是什么?

  14. 14

    FlowType.JS无法正常工作

  15. 15

    FlowType.JS无法正常工作

  16. 16

    如何使用Flowtype设置React + Flux

  17. 17

    应将Reacts的propTypes和defaultProps与Flowtype一起使用,还是Flowtype足够全面?

  18. 18

    flowtype:PackageHeap中找不到package.json

  19. 19

    flowtype-如何为导出函数的包声明接口?

  20. 20

    如何使用Flowtype正确处理AngularJS $ inject批注

  21. 21

    FlowType中的自定义解析器

  22. 22

    flowtype:PackageHeap中找不到package.json

  23. 23

    Flowtype / jQuery - 在函数的静态中找不到属性`datepicker` 属性

  24. 24

    Swift不会从框架中提取NSMutableArray类型注释

  25. 25

    Flowtype-字符串与字符串枚举不兼容

  26. 26

    将Flowtype与react-css-modules装饰的组件一起使用

  27. 27

    flowtype 拒绝使用 ./listentry.html 导入 html。找不到所需的模块

  28. 28

    Flowtype 中 Typescript 的“EnumType 中的键”的等价物是什么?

  29. 29

    包装函数而不会破坏默认参数

热门标签

归档