2017-09-02 5 views
0

J'écris des typings typographiques pour certaines bibliothèques js. Je dois déclarer décorateur en option appelable:Dactylographie pour un décorateur callable en option dans Typescript

@model 
class User {} 

@model() 
class User {} 

@model('User') 
class User {} 

J'ai essayé d'utiliser ClassDecorator de lib.es6.d.ts mais pas de chance:

Bien sûr, je peux faire taper manuelle solution de contournement:

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

Mais comment puis-je réutiliser le type ClassDecorator existant dans ce cas?

Répondre

1

Le problème est que vous utilisez un type d'union, les variables de ce type n'ont que les membres communs des deux types, dans ce cas puisque seul l'un des types est appelable, le syndicat ne sera pas appelable

Vous recherchez un type d'intersection, qui aura un membre des deux types de type

export const model: ClassDecorator & CallableModelDecorator; 
+0

Cela fonctionne! Merci pour l'explication. Docs https://www.typescriptlang.org/docs/handbook/advanced-types.html – farwayer