错误 TS2339:“FormData”类型上不存在属性“条目”

Posted

技术标签:

【中文标题】错误 TS2339:“FormData”类型上不存在属性“条目”【英文标题】:Error TS2339: Property 'entries' does not exist on type 'FormData' 【发布时间】:2018-11-13 15:05:35 【问题描述】:

我在 *** 和网络上进行了搜索,我找到了这个线程 https://github.com/Microsoft/TypeScript/issues/14813,但它并没有解决我的问题。我在使用ng serve --watch 编译代码时遇到了这个错误。

带有fd.entries() 的这部分会触发错误...知道这里发生了什么吗?

onFileSelected(event) 
    const fd = new FormData;

    for (const file of event.target.files) 
        fd.append('thumbnail', file, file.name);

        const entries = fd.entries();
        // some other methods are called here e. g. upload the images

        for (const pair of entries) 
            fd.delete(pair[0]);
        
    

我看到 (https://github.com/Microsoft/TypeScript/blob/master/src/lib/dom.iterable.d.ts) 有一些 entries 的接口,但不知何故这对我不起作用。

编辑

我的tsconfig.json 看起来像这样


    "compileOnSave": false,
    "compilerOptions": 
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es5",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "es2017",
            "dom"
        ]
    

【问题讨论】:

你能显示你的tsconfig.json的lib数组吗? 我在这个问题上添加了我的tsconfig.json 【参考方案1】:

TypeScript 不支持它,除非你编译到 ES6。

"target": "es5"

如果是es6的话就可以了

【讨论】:

我不认为这是正确的。 new FormData().entries()es6 失败。您是否测试过您的解决方案?【参考方案2】:

并非所有浏览器都支持entries 方法。如果你无论如何都想使用该方法,并且仍然将目标设置为es5,你可以extend当前界面

declare global 
  interface FormData 
    entries(): Iterator<[USVString, USVString | Blob]>;
  

【讨论】:

对不起,可能是一个 noop 问题...我在哪里放置这个接口?就在文件末尾?我试过了,但这并没有解决错误。我该如何实现这个接口? 你可以把它放在组件类的上面。如果您打算更频繁地使用它,您可以将其导出,也可以将其放在自己的文件中 不幸的是,当我将它放在组件的顶部时,这不起作用。我仍然得到同样的错误error TS2339: Property 'entries' does not exist on type 'FormData'.任何想法? 也许重启cli,因为它倾向于缓存接口/接口变化 @webtobesocial 我已经使用declare global 更新了我的答案。您可以将它放在polyfills.ts 的底部,然后您就可以在代码中的任何地方使用FormData.entries()【参考方案3】:

您需要在tsconfig.json 中的lib 列表中添加“dom.iterable”,例如:


  "compilerOptions": 
    "baseUrl": ".",
    "outDir": "build/dist",
    "module": "esnext",
    "target": "es6",
    "lib": [
      "es2019",
      "dom",
      "dom.iterable" // <- there you are
    ],
    // ...

【讨论】:

再次“ng serve”。 这是唯一正确的修复方法。在 VSCode 中,您需要运行命令 TypeScript: Restart TS Server 以获取新的库。 我还必须在我的 tsconfig.js 中添加:"downlevelIteration": true,【参考方案4】:

只需使用 Object().entries(() => ) 语法。

【讨论】:

以上是关于错误 TS2339:“FormData”类型上不存在属性“条目”的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2339:类型“”上不存在属性“contenido”

错误 TS2339:“主页”类型上不存在属性“路由器”

TypeScript:TS2339 错误——“对象”类型上不存在属性

错误 TS2339:“字符串”类型上不存在属性“endsWith”

错误 TS2339:类型“Y”上不存在属性“x”

角度:错误 TS2339:“对象”类型上不存在属性“数据”