Вывод типа аргумента TypeScript для универсального аргумента функции c с возвратом? - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь создать общую c функцию, которая принимает другую функцию и определяет тип возвращаемого значения (аналогично тому, что делает карта).

У меня есть этот код:

type game_selector<T> = <T>( state : GT.game_state ) => T

export function useGameState<T>( gs : game_selector<T> ): T {

И затем я называю это так:

const users = useGameState( gs => gs.users )

Я предполагаю из ошибки, что тип gs правильно выведен, поскольку он правильно находит тип gs.users как Users. Ошибка:

TS2322: Type 'Users' is not assignable to type 'T'

Как правильно набрать эту функцию?

1 Ответ

3 голосов
/ 11 июля 2020

У вас есть ненужный дополнительный тип c здесь:

type game_selector<T> = <T>( state : GT.game_state ) => T;

Возвращенный T на самом деле это: <T>(...), но я подозреваю, что вам нужен предоставленный тип из game_selector<T> .

Если вы попробуете это на игровой площадке Typescript, вы действительно увидите слегка затененный T в game_selector<T>. При наведении курсора на него отображается предупреждение:

объявлено 'T', но его значение никогда не читается. (6133)

Это исправит для вас:

type game_selector<T> = ( state : GT.game_state ) => T;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...