[英]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.