← Wszystkie zadaniaTypeScript · Middle
Type guards: isDefined, isString, isOneOf
Napisz trzy sprawdzenia, po których TypeScript zawęża typ wartości.
isDefined(value): nie null i nie undefined; [1, null, 2].filter(isDefined) ma dawać number[], a 0 i "" to też wartości. isString(value): napis. isOneOf(values) zwraca sprawdzenie, czy wartość jest jedną z listy: po isOneOf(["red", "green"] as const)(c) typ c to "red" | "green".
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (6)
Testy typów sprawdza kompilator TypeScriptu w trybie strict. Expect<Equal<A, B>> przechodzi, gdy typy są dokładnie takie same, a // @ts-expect-error, gdy następna linia się nie kompiluje. Pierwsze uruchomienie pobiera kompilator, więc trwa kilka sekund.
- typy
const xs = [1, null, 2, undefined].filter(isDefined); type _ = Expect<Equal<typeof xs, number[]>>;
- typy
const v: unknown = 'x'; if (isString(v)) { type _ = Expect<Equal<typeof v, string>>; }
- typy
const isColor = isOneOf(['red', 'green'] as const); const c: unknown = 'red'; if (isColor(c)) { type _ = Expect<Equal<typeof c, 'red' | 'green'>>; }
expect([1, null, 2, undefined, 0, ''].filter(isDefined)).toEqual([1, 2, 0, '']);
expect(isString('a')).toBe(true); expect(isString(1)).toBe(false); expect(isString(null)).toBe(false);
const isColor = isOneOf(['red', 'green']); expect(isColor('red')).toBe(true); expect(isColor('blue')).toBe(false);