在Typescript中键入可选的可调用装饰器

问题描述:

我正在为某些js库编写打字稿。我需要声明任意调用装饰:在Typescript中键入可选的可调用装饰器

@model 
class User {} 

@model() 
class User {} 

@model('User') 
class User {} 

我试图用ClassDecoratorlib.es6.d.ts但没有运气:

我当然可以进行手动输入的解决方法:

export function model<TFunction extends Function>(target: TFunction): TFunction | void; 
export function model(name?: string): 
    <TFunction extends Function>(target: TFunction) => TFunction | void; 

但是,在这种情况下,如何重复使用现有的ClassDecorator类型?

问题是你使用的是联合类型,这些类型的变量只能有两种类型的普通成员,所以在这种情况下,由于两个类型中仅有一个是可调用的,工会将不会调用

你正在寻找一个十字路口类型,这将有两种类型的成员

export const model: ClassDecorator & CallableModelDecorator; 
+0

它的工作原理!感谢您的解释。文档https://www.typescriptlang.org/docs/handbook/advanced-types.html – farwayer