← Wszystkie zadaniaTypeScript · Senior

Parametry trasy z napisu

Routery takie jak React Router i Express opisują trasę napisem: /users/:id/posts/:postId. Napisz typ RouteParams<Path>, który z takiego napisu wyprowadza obiekt parametrów { id: string; postId: string }, a dla trasy bez parametrów daje {}.

Dzięki niemu buildPath(pattern, params) będzie wymagać dokładnie tych parametrów, które ma trasa, i wstawi je do ścieżki, kodując wartości przez encodeURIComponent.

Testy (7)

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.

  1. typy
    type _ = Expect<Equal<RouteParams<'/users/:id/posts/:postId'>, { id: string; postId: string }>>;
  2. typy
    type _ = Expect<Equal<RouteParams<'/about'>, {}>>;
  3. typy
    buildPath('/users/:id', { id: '42' });
  4. typy
    // @ts-expect-error - postId is missing
    buildPath('/users/:id/posts/:postId', { id: '1' });
  5. expect(buildPath('/users/:id/posts/:postId', { id: '7', postId: '9' })).toBe('/users/7/posts/9');
  6. expect(buildPath('/search/:query', { query: 'a b/c' })).toBe('/search/a%20b%2Fc');
  7. expect(buildPath('/about', {})).toBe('/about');