Я бы не рекомендовал это делать. Вы будете делать много проверок, чтобы узнать, относится ли ваша собственность к тому или иному типу.
interface MyInstance {
x : any
}
type SomeFunction = (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
type BooleanOrFunction = boolean | SomeFunction
interface MyOptions {
highlightMatch: BooleanOrFunction;
}
const myOptionsWithBoolean: MyOptions = {
highlightMatch: true,
}
const myOptionsWithFunction: MyOptions = {
highlightMatch: (instance: MyInstance, rendered: JQuery<HTMLElement>) => {
return void 0;
},
}
myOptionsWithFunction.highlightMatch; // Typescript has No idea what this is
if (myOptionsWithFunction.highlightMatch && typeof myOptionsWithFunction.highlightMatch !== 'boolean') {
myOptionsWithFunction.highlightMatch(x as any, y as any);
} else {
myOptionsWithFunction.highlightMatch // Here this is a boolean
}
Ссылка на площадку
Моя рекомендация? Сделайте это с помощью Generics
interface MyInstance {
x : any
}
type SomeFunction = (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
type HighlightMatch = boolean | SomeFunction
interface MyOptions<T> {
highlightMatch: T;
}
const myOptionsWithBoolean: MyOptions<boolean> = {
highlightMatch: true,
}
const myOptionsWithFunction: MyOptions<SomeFunction> = {
highlightMatch: (instance: MyInstance, rendered: JQuery<HTMLElement>) => {
return void 0;
},
}
myOptionsWithFunction.highlightMatch; // This is a function Thanks Generic!
myOptionsWithBoolean.highlightMatch; // This is boolean!
Ссылка на игровую площадку