Categories
程式開發

搭建node服務(四):Decorator裝飾器


Decorator(裝飾器)是ECMAScript中一種與class相關的語法,用於給對像在運行期間動態的增加功能。 Node.js 還不支持Decorator,可以使用Babel進行轉換,也可以在TypeScript中使用Decorator。本示例則是基於TypeScript來介紹如何在node服務中使用Decorator。

一、 TypeScript相關

由於使用了TypeScript ,需要安裝TypeScript相關的依賴,並在根目錄添加tsconfig.json 配置文件,這裡不再詳細說明。要想在TypeScript 中使用Decorator 裝飾器,必須將tsconfig.json 中experimentalDecorators設置為true,如下所示:

tsconfig.json

{
"compilerOptions": {

// 是否启用实验性的ES装饰器
"experimentalDecorators": true
}
}

二、 裝飾器介紹

1. 簡單示例

Decorator實際是一種語法糖,下面是一個簡單的用TypeScript編寫的裝飾器示例:

const Controller: ClassDecorator = (target: any) => {
target.isController = true;
};
@Controller
class MyClass {
}
console.log(MyClass.isController); // 输出结果:true

Controller是一個類裝飾器,在MyClass類聲明前以@Controller 的形式使用裝飾器,添加裝飾器後MyClass. isController 的值為true。編譯後的代碼如下:

var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c = 0; i--) if (d = decorators[i]) r = (c 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
const Controller = (target) => {
target.isController = true;
};
let MyClass = class MyClass {
};
MyClass = __decorate([
Controller
], MyClass);

2. 工廠方法