3 回答

TA貢獻1794條經(jīng)驗 獲得超7個贊
當您將不正確數(shù)量的參數(shù)傳遞給匿名函數(shù)時,有時會發(fā)生這種情況:
Object.keys(data).reduce((key: string) => {
}, {});
會引發(fā)錯誤:
沒有重載匹配這個調(diào)用。重載 1 of 3
將正確數(shù)量的參數(shù)傳遞給它:
Object.keys(data).reduce((acc: any, key: string) => {
}, {});

TA貢獻1851條經(jīng)驗 獲得超3個贊
我也有這個奇怪的問題,但我使用類型斷言(在我的例子中使用字符串枚舉)解決了它:
(Object.values(someEnum) as string[]).concat(otherStringArray);

TA貢獻1829條經(jīng)驗 獲得超13個贊
解決方案 1:保留數(shù)字枚舉 signals
Object.values(signals)
// numeric enum includes reverse mapping, filter numbers out and keep "SIGHUP" etc.
.filter((s): s is NodeJS.Signals => typeof s !== "number")
.forEach(signal => {
process.on(signal, ...) // works now
})
解決方案 2:使用純信號字符串文字類型
// these string literal items are strongly typed by built-in NodeJS.Signals type
Object.values<NodeJS.Signals>(["SIGHUP", "SIGINT", "SIGTERM"])
.forEach(signal => {
process.on(signal, ...) // works now
})
方案三:改成字符串枚舉(無反向映射)
enum signals2 {
SIGHUP = "SIGHUP",
SIGINT = "SIGINT",
SIGTERM = "SIGTERM"
}
Object.values(signals2)
.forEach(signal => {
process.on(signal, ...) // works now
})
為什么會發(fā)生錯誤?
數(shù)字枚舉signals包括反向映射。例如,您可以執(zhí)行以下操作:
const r1 = signals.SIGHUP // r1 value: 1
const r2 = signals[signals.SIGINT] // r2 value: "SIGINT"
const r3 = signals[15] // r3 value: "SIGTERM"
這就是為什么你(string | signals)[]回來 for Object.values(signals), wherestring代表枚舉鍵和signals枚舉值。
現(xiàn)在,參數(shù)signalinprocess.on(signal, ...)必須是預(yù)定義的 Node.JS 字符串文字類型之一。但是我們傳入了string | signals項目類型,所以 TS 在這一點上大喊大叫。
添加回答
舉報