デコレーター

関数や、変数にアクセスするとき、前処理を挿入できる。

 

compileすると、.jsファイルができる。

tsc –target ES5 –experimentalDecorators deco.ts

 

deco.ts


//1. デコレーターファクトリー
function deco() {
    console.log("deco(): evaluated");
    return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
        console.log("deco(): called");
    }
}

class A{
    @deco()
    greeter(person:string) {
        return "Hello, " + person;
    }
}


// メソッドデコレーター
function method_deco(target, propertyKey: string, descriptor: PropertyDescriptor) {
    console.log("method_deco(): called");
}

// クラスデコレーター
function class_deco(fnc: Function){
    console.log("class_deco(): called");
}

// パラメーターデコレーター
function param_deco(target: any, props: string, index: number) {
    console.log("param_deco(): called");
}

@class_deco
class B{
    
    @method_deco
    hoge(@param_deco person:string) {
        return "Hello, " + person;
    }
}


let user = "yamada taro";

let a = new A();
let b =new B();

document.body.innerHTML = a.greeter(user);
document.body.innerHTML += b.hoge(user);

 

test.html

<!DOCTYPE html>
<html>
    <head><title>TypeScript Greeter</title></head>
    <body>
        <!-- <script src="greeter.js"></script> -->
        <!-- <script src="class.js"></script> -->
        <script src="deco.js"></script>
    </body>
</html>

 

デコレーターの呼ばれる順番

deco(): evaluated
deco(): called
param_deco(): called
method_deco(): called
class_deco(): called

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です