Я переписываю проект, в котором используется следующий Typescript Union Type для свойства, которое может быть либо строкой, либо функцией:
string|((value: any) => string)
Другими словами, свойство может содержать либо строку, либо функцию, которая возвращает строку. Это означает, что мы всегда должны использовать защиту типов при работе с этим свойством. Гораздо проще просто использовать функцию, которая возвращает такую строку:
((value: any) => string)
Возвращаемая строка может быть либо шаблоном, либо статической строкой. Например, эти два случая обратной кавычки Typescript будут работать:
(value)=> { return `The value is ${value}`; }
И
(value)=> { return `The value is Howdy`; }
После этого вы можете попрощаться с охранниками типа. Функция, которая возвращает строку, может поддерживать ту же сигнатуру API, и ваши строки кода резко сокращаются вместе с возможностью совершения ошибок.