Как принудительно проверить лишнее свойство TypeScript для возвращаемого значения функции - PullRequest
0 голосов
/ 05 августа 2020

Далее c: 3 должно быть ошибкой типа, но это не так. Как этого достичь?

export type ExcludeUndefined<T> = T extends undefined ? never : T

export type GetRequiredKeys<T> = { [K in keyof T]: undefined extends T[K] ? never : K }[keyof T]

export type KeepRequiredKeys<t> = {
  [k in ExcludeUndefined<GetRequiredKeys<t>>]-?: undefined extends t[k] ? never : t[k]
}

const ok: KeepRequiredKeys<{
  b: 1
  c?: number | undefined
}> = { b: 1, c: 3 } // this type errors as expected

const bad: () => KeepRequiredKeys<{
  b: 1
  c?: number | undefined
}> = () => ({ b: 1, c: 3 }) // c: 3 should be type error, is not

Ссылка на площадку

1 Ответ

0 голосов
/ 05 августа 2020

Вы правы в том, что это относится к https://github.com/microsoft/TypeScript/issues/241 --- это проблема расширения типа. Возвращаемое значение выводится, а затем проверяется тип всего выражения функции, может ли оно быть присвоено форме (типу) переменной const.

К сожалению, вы ничего не можете сделать динамически, кроме как вручную аннотировать возвращаемое значение обратный вызов, чтобы он больше не предполагался, что в большинстве случаев несколько сводит на нет цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...