簡體   English   中英

Set 類型的 TypeScript 錯誤

[英]TypeScript errors with Set type

我嘗試轉換為 TypeScript 的函數有 2 個錯誤。 問題在於Set類型的參數

import type {Set} from 'typescript'

function union<T>(setA: Set<T>, setB: Set<T>) {
  const _union = new Set(setA);
  for (const elem of setB) {
    _union.add(elem)
  }
  return _union
}

第一個錯誤在第 4 行: new Set(setA)

TS2769:沒有與此調用匹配的過載。

第二個錯誤在第 5 行: for (const elem of setB)

TS2495:類型“Set”不是數組類型或字符串類型。

否則,此功能將按預期工作。

tsconfig.json文件

{
    "compilerOptions": {
        "sourceMap": true,
        "outDir": "dist",
        "module": "commonjs",
        "target": "es5",
        "lib": ["esnext"],
        "esModuleInterop": true
    },
    "exclude": [
        "node_modules"
    ],
    "include": [
        "src/**/*"
    ]
}

問題

當您import { Set } from 'typescript' ,您實際上導入了 Set 對象的類型定義。 然后,我相信類型定義與 javascript 給出的 Set 對象重疊(無需導入它)。 如果您在typescript中查找Set類型定義,您會發現Set代表一個 Typescript interface

    interface Set<T> extends ReadonlySet<T>, Collection<T> {
        add(value: T): this;
        delete(value: T): boolean;
    }

但是當您調用new Set()時,解釋器會尋找構造函數來啟動對象,但找不到,因為導入的Set是一個接口。 這就是你得到錯誤的原因:

  • No overload matches this call. :導入的Set沒有構造函數,因此 Typescript 找不到任何可以啟動Set的相關函數。
  • TS2495: Type 'Set ' is not an array type or a string type. : Set確實不是數組類型,也不是字符串,因為它是一個interface

解決方案

由於 javascript 為我們提供了 Set 對象,因此無需導入它,您根本不必導入它。 此外,您也不必導入Set類型定義,因為它是內置的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM