<commit_before># 介绍

随着TypeScript和ES6里引入了类，在一些场景下我们需要额外的特性来支持标注或修改类及其成员。
装饰器（Decorators）为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。
Javascript里的装饰器目前处在[建议征集的第一阶段](https://github.com/wycats/javascript-decorators/blob/master/README.md)，但在TypeScript里已做为一项实验性特性予以支持。

> 注意&emsp; 装饰器是一项实验性特性，在未来的版本中可能会发生改变。

若要启用实验性的装饰器特性，你必须在命令行或`tsconfig.json`里启用`experimentalDecorators`编译器选项：

**命令行**:

```shell
tsc --target ES5 --experimentalDecorators
```

**tsconfig.json**:

```json
{
    "compilerOptions": {
        "target": "ES5",
        "experimentalDecorators": true
    }
}
```

# 装饰器

*装饰器*是一种特殊类型的声明，它能够被附加到[类声明](#class-decorators)，[方法](#method-decorators)，[访问符](#accessor-decorators)，[属性](#property-decorators)或[参数](#parameter-decorators)上。
装饰器使用`@expression`这种形式，`expression`求值后必须为一个函数，它会在运行时被调用，被装饰的声明信息做为参数传入。

例如，有一个`@sealed`装饰器，我们会这样定义`sealed`函数：

```ts<commit_msg>Update link to decorators spec. PR529<commit_after># 介绍

随着TypeScript和ES6里引入了类，在一些场景下我们需要额外的特性来支持标注或修改类及其成员。
装饰器（Decorators）为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。
Javascript里的装饰器目前处在[建议征集的第二阶段](https://github.com/tc39/proposal-decorators)，但在TypeScript里已做为一项实验性特性予以支持。

> 注意&emsp; 装饰器是一项实验性特性，在未来的版本中可能会发生改变。

若要启用实验性的装饰器特性，你必须在命令行或`tsconfig.json`里启用`experimentalDecorators`编译器选项：

**命令行**:

```shell
tsc --target ES5 --experimentalDecorators
```

**tsconfig.json**:

```json
{
    "compilerOptions": {
        "target": "ES5",
        "experimentalDecorators": true
    }
}
```

# 装饰器

*装饰器*是一种特殊类型的声明，它能够被附加到[类声明](#class-decorators)，[方法](#method-decorators)，[访问符](#accessor-decorators)，[属性](#property-decorators)或[参数](#parameter-decorators)上。
装饰器使用`@expression`这种形式，`expression`求值后必须为一个函数，它会在运行时被调用，被装饰的声明信息做为参数传入。

例如，有一个`@sealed`装饰器，我们会这样定义`sealed`函数：

```ts
{'fraction_non_alphanumeric': 0.1608187134502924, 'fraction_numerical': 0.006432748538011696, 'mean_word_length': 8.453038674033149, 'pattern_counts': {'":': 6, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4120209', 'n_tokens_mistral': 1013, 'n_tokens_neox': 1132, 'n_words': 56}