В настоящее время я пытаюсь добавить правильную типизацию к следующей упрощенной функции:
getProperty(property:string):any
Моя цель - сделать возможным передать параметр свойства как string
или string enum
и получить правильный результат введите его.
Для этого я создал новый string enum
Свойство:
enum Property {
ENABLED = 'enabled',
SIZE = 'size'
}
a generic type
PropertyType:
type PropertyType < T > =
T extends Property.ENABLED ? boolean :
T extends Property.SIZE ? number : any;
и изменил функцию подпись:
getProperty<T extends Property>(property : T) : PropertyType<T>
Это отлично работает, если я вызываю функцию с новым string enum
:
const enabled: boolean = getProperty(Property.ENABLED);
Но если я вызываю функцию с простой строкой (необходимо для обратного совместимость) вот так:
const enabled: boolean = getProperty("enabled");
Я получаю следующую ошибку:
Argument of type '"enabled"' is not assignable to parameter of type 'Property'.(2345)
Есть ли хороший способ поддержки обоих способов (string
и string enum
) для передачи параметр свойства?
Мой пример также доступен здесь: Машинописная площадка