У меня есть приложение Vue. Я конвертирую ваниль JS в TypeScript, и у меня есть этот шаблон; У меня есть компонент, который принимает элемент свойства, который представляет собой объект с несколькими свойствами, следующие схеме:
type Button = {
variant?: 'string' | function(): string;
...others...
}
Все работает по идее, что он принимает строку или функцию, которая возвращает строку (это также работает for booleans et c ...)
В том же компоненте у меня есть функция, которая проверяет, является ли ключ функцией, и выполняет ли она ее, и возвращает результат, если это не функция. просто передает, что бы это ни было.
private finalize<K extends keyof Button>(item: Button, key: K, target: Button["target"]): Button[K] {
let finalized:Button[K]? = null;
if (identify(item).isObject()) {
if (identify(item[key]).isFunction()) {
finalized = item[key](target);
} else {
finalized = item[key];
}
} else if (item) {
finalized = item;
};
return finalized;
}
Моя проблема в том, что я хочу сузить возвращаемый тип из объединения, например - string | () => string
-, до string
. Вместо этого мой возвращаемый тип функции завершения по-прежнему string | () => string
. Как я понимаю, что TS понимает, что если это функция, то она выполнит ее