TypeScript: Jak stworzyć pustą liczbę?
Opublikowano: 10.01.2023 - tagi: TypeScript JavaScript Liczba
Czym jest pusta liczba?
Ostatnio stanąłem przed zadaniem napisania testu jednostkowego, który sprawdzał przypadek: przekazany do funkcji model danych jest niepoprawny, więc walidacja powinna to wykryć i nie stworzyć rekordu w bazie danych. Jedno z wymaganych pól jest liczbą. Na przykład:
interface Model {
name: string;
value: number;
};
test('should not allow empty number', () => {
// given
const model: Model = {
name: 'Test',
};
// when
const result: boolean = validate(model);
// given
expect(result).toBeFalsy();
});
W tym teście symuluję przypadek, gdy do modelu nie jest przekazana wartość dla pola value. Problem w tym, że taki zapis nie zadziała, ponieważ TypeScript wyrzuci błąd:
error TS2741: Property 'value' is missing in type '{ name: string; }' but required in type 'Model'
Ten problem można rozwiązać poprzez małą zmianę w definicji modelu:
interface Model {
name: string;
value?: number;
};
Za pomocą operatora: ? informujemy TypeScript, że pole value jest opcjonalne, ale... to nie prawda, bo powinno być wymagane!
Jak to rozwiązać?
Pusta liczba przykład
Żeby stworzyć "pustą" liczbę można jej przypisać wartość NaN:
interface Model {
name: string;
value: number;
};
test('should not allow empty number', () => {
// given
const model: Model = {
name: 'Test',
value: NaN
};
// when
const result: boolean = validate(model);
// given
expect(result).toBeFalsy();
});
Wartość NaN jest typu number i dlatego TypeScript nie sygnalizuje błędu.