typescript - 如何正確縮小 `unknown` 類型
摘要:為什麼
const func = (a: unknown) => {
if (a && typeof a === 'object' && 'b' in a) {
a.b;
}
};
給出以下錯誤訊息
Property 'b' does not exist on type 'object'.
?
編輯:在更仔細地研究這個問題後,我有了一個更簡化的範例。所以讓我重新表達我的問題:
如何在 TypeScript 中正確縮小 object 類型?
摘要:為什麼
const func = (a: object) => {
if ('b' in a) {
a.b;
}
顯示以下錯誤訊息:
Property 'b' does not exist on type 'object'.
?
答案#1
你應該更仔細地看看自訂型別保護。它們基本上讓編譯器知道,如果條件成立,被檢查的值將具有特定的型別。
在你的情況下:
- 定義自訂型別保護
const hasB = (value: unknown): value is { b: unknown } => {
return (
typeof value === 'object'
&& value !== null
&& 'b' in value
);
}
- 用它檢查你的數值
const func = (a: unknown) => {
if (hasB(a)) {
a.b;
}
};
遊樂場範例
