Условные типы для объектов с конструкторами - PullRequest
0 голосов
/ 27 декабря 2018

Когда я использую Immutable.js, я использую несколько пользовательских типов, которые я написал, чтобы сделать мою жизнь немного проще.Один из них предсказывает, будет ли свойство Неизменяемой карты получено в исходном состоянии (примитиве) или как другая Неизменяемая карта.Я добиваюсь этого с помощью следующего условного типа:

type ImmutablePrimitive = string | number | boolean | symbol | String | Number | Boolean | Symbol | Element;

type ImmutablePrimitiveSwitchValue<VALUE_TYPE> = VALUE_TYPE extends ImmutablePrimitive ? VALUE_TYPE : Immutable.Map<any, any>;

ImmutablePrimitiveSwitch проверяет, передан ли ему тип типа в небольшом списке примитивных типов - если используется этот тип, в противном случаевозвращается общая карта.

Это хорошо работает в большинстве случаев, но не так, как на самом деле работает Immutable.Под капотом Immutable есть понятие «простых» объектов, , которые определены как объекты, у которых нет конструкторов .

Может ли Typescript выполнить аналогичную проверку в условных типах? Я бы хотел иметь возможность заменить мой неполный список литералов надлежащей проверкой, соответствующей логике Immutable.

...