Я переписываю проект, в котором используется следующий Typescript Union Type для свойства, которое может быть либо строкой, либо функцией:

string|((value: any) => string)

Другими словами, свойство может содержать либо строку, либо функцию, которая возвращает строку. Это означает, что мы всегда должны использовать защиту типов при работе с этим свойством. Гораздо проще просто использовать функцию, которая возвращает такую ​​строку:

((value: any) => string)

Возвращаемая строка может быть либо шаблоном, либо статической строкой. Например, эти два случая обратной кавычки Typescript будут работать:

(value)=> {
    return `The value is ${value}`;
}

И

(value)=> {
    return `The value is Howdy`;
}

После этого вы можете попрощаться с охранниками типа. Функция, которая возвращает строку, может поддерживать ту же сигнатуру API, и ваши строки кода резко сокращаются вместе с возможностью совершения ошибок.