在Typescript中键入可选的可调用装饰器
问题描述:
我正在为某些js库编写打字稿。我需要声明任意调用装饰:在Typescript中键入可选的可调用装饰器
@model
class User {}
@model()
class User {}
@model('User')
class User {}
我试图用ClassDecorator
从lib.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;
它的工作原理!感谢您的解释。文档https://www.typescriptlang.org/docs/handbook/advanced-types.html – farwayer