以下打字代码有什么作用?

时间:2017-12-18 11:06:15

标签: angular typescript

以下代码取自角度源代码di.ts

export interface AttributeDecorator { 
  (name: string): any;
  new (name: string): Attribute;
}

我知道这是一个界面。但是new (name: string): Attribute正在做什么以及为什么有两种类型的名称string and any

上面的代码后跟

export interface Attribute { attributeName?: string; }
export const Attribute: AttributeDecorator = makeParamDecorator('Attribute', (attributeName?: string) => ({attributeName}));

1 个答案:

答案 0 :(得分:2)

(name: string): any表示实现此接口的函数应该被称为常规函数;它使用name字符串参数调用并返回any

new (name: string): Attribute表示实现此接口的函数应该用作构造函数,使用new调用并返回Attribute对象。

这个装饰器接口描述了Angular装饰器函数可以同时用作@Attribute(...) parameter decorator函数和new Attribute(...)构造函数的事实,并且在被调用时它们的行为也不同。

new Attribute(...)可用于ES5和ES6中的注释,如this answer所示。

此接口描述并由makeParamDecorator工厂创建的函数应该大致类似于:

// decorator factory
const MyAttributeDecorator = function (attributeName?: string) {
  if (new.target)
    // Attribute object
    return { attributeName };
  else
    // parameter decorator
    return (target, prop, paramIndex) => { ... };
}