Typescript null-kedja och typereduktion
Jag har stött på ett fall där jag känner att TypeScript inte korrekt begränsar en given typ.
(value: number[] | null) => {
if ((value?.length ?? 0) > 0) value[0];
};
I if-grenen ger det mig fortfarande ett Object is possibly 'null' även om villkoret inte kommer att vara sant om value är null.
Borde inte detta smalnas av och varför ja/nej?
Finns det en bekväm lösning om detta förväntade beteende?
Svar #1
Inte det fullständiga svaret men:
Detta hände eftersom du inte har en direkt kontroll för null/undefined och TS är ännu inte så smart att identifiera detta själv.
Du har två alternativ:
1. Mer utförlig men säkrare:
Använd kryss som här:
(value: number[] | null) => {
if (value ==null && value.length > 0) value[0];
};
eller med typvakter som här:
(value: number[] | null) => {
if (!isnull(value) && value.length > 0) value[0];
};
function isnull(value: any): value is null {
return value == null;
}
2. Alternativ för de säkra människorna:
Säg till TS att: Jag är säker gör bara det och använd !-notation. Som här:
(value: number[] | null) => {
if (value?.length ?? 0 > 0) value![0];
};
Hoppas detta hjälper
