← Wszystkie zadaniaTypeScript · Middle
Mapped types: MyPick, MyReadonly, MyOmit
Napisz własne wersje typów narzędziowych bez wbudowanych Pick, Readonly, Omit i Exclude.
MyPick<T, K> zostawia w T tylko klucze K (i nie pozwala na klucz, którego T nie ma), MyReadonly<T> robi wszystkie pola readonly na pierwszym poziomie, a MyOmit<T, K> usuwa klucze K, zachowując opcjonalność pozostałych pól.
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 (5)
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
interface Todo { title: string; done: boolean; tags: string[] } type _ = Expect<Equal<MyPick<Todo, 'title' | 'done'>, { title: string; done: boolean }>>;
- typy
interface Todo { title: string; done: boolean } // @ts-expect-error - 'nope' is not a key of Todo type _ = MyPick<Todo, 'nope'>;
- typy
interface Todo { title: string; meta: { done: boolean } } type _ = Expect<Equal<MyReadonly<Todo>, { readonly title: string; readonly meta: { done: boolean } }>>;
- typy
interface Todo { title: string; done: boolean; tags: string[] } type _ = Expect<Equal<MyOmit<Todo, 'tags'>, { title: string; done: boolean }>>;
- typy
interface Todo { title: string; done?: boolean } type _ = Expect<Equal<MyOmit<Todo, 'title'>, { done?: boolean }>>;