typescript - Hur man korrekt begränsar typen `unknown`
tl;dr varför gör
const func = (a: unknown) => {
if (a && typeof a === 'object' && 'b' in a) {
a.b;
}
};
Visa följande felmeddelande
Property 'b' does not exist on type 'object'.
?
Redigera: Efter att ha undersökt detta mer noggrant har jag ett ännu mer minimalt exempel. Så låt mig omformulera min fråga:
Hur man sannolikt begränsar object-typen i TypeScript?
tl;dr varför gör
const func = (a: object) => {
if ('b' in a) {
a.b;
}
ge följande felmeddelande:
Property 'b' does not exist on type 'object'.
?
Svar #1
Du borde ta en närmare titt på anpassad typvakt. De låter i princip kompilatorn veta att om villkoret uppfylls, kommer det kontrollerade värdet att ha en specifik typ.
I ditt fall:
- Definiera en anpassad typvakt
const hasB = (value: unknown): value is { b: unknown } => {
return (
typeof value === 'object'
&& value !== null
&& 'b' in value
);
}
- Kontrollera ditt värde med det
const func = (a: unknown) => {
if (hasB(a)) {
a.b;
}
};
Lekplats exempel
