我有一個型別Level,它的數字在 1 到 6 之間(包括 1 和 6)。我有另一個介于 1 和 8 之間的數字串列我有一個接受級別的函式我試圖縮小型別但沒有得到修復:
type Level = 1 | 2 | 3 | 4 | 5 | 6;
onSelect={(level: number) => {
// level is between number 1 to 8 but the setHeading function bellow accepts an object with a level key that it's type is Level
if ([1, 2, 3, 4, 5, 6].includes(level)) {
editor.commands.setHeading({
level,
});
} else if (level === 7) {
editor.commands.setParagraph();
}
}}
不應該有任何錯誤,因為我將范圍縮小level到Level但在 VS Code 中我得到一個錯誤,上面寫著:
Type 'number' is not assignable to type 'Level'.ts(2322)
heading.d.ts(16, 17): The expected type comes from property 'level' which is declared here on type '{ level: Level; }'
我試圖縮小范圍level并使一切正常,但我仍然遇到同樣的錯誤。
uj5u.com熱心網友回復:
該.includes方法是在沒有任何型別謂詞的情況下撰寫的。這意味著它沒有縮小功能,并且保持其輸入型別不變。
您必須撰寫自己的型別保護來包裝includes邏輯。
const isLevel = (level: number): level is Level => {
return [1, 2, 3, 4, 5, 6].includes(level)
}
const onSelect =(level: number) => {
if (isLevel(level)) {
setHeading({
level,
});
}
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528392.html
標籤:打字稿视觉工作室代码
上一篇:在VisualStudioCode上開發我的網頁時,在VSC上所做的更改突然停止出現在我的頁面上
下一篇:正則運算式匹配
