全局安装typescript
npm install -g typescript
初始化ts环境
tsc --init
生成tsconfig.json文件,并把文件中的两行注释打开
"experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
"emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
类装饰器
装饰器和元数据都是实验特性,他俩密切相关,使用tsc -w可以编译成js文件,下面是类装饰器举例,其中TestDecorator和decorator是两个类装饰器,decorator装饰器给类Test添加了一个message方法,可以接受到string类型的参数。
function TestDecorator(target: Function) {
console.log('test decorator')
}
const decorator: ClassDecorator = (target: Function) => {
target.prototype.message = (content:string): void => {
console.log('装饰器中message:'+content)
}
}
@TestDecorator
@decorator
class Test {
}
const test:any = new Test()
test.message('传递的消息')
这里的输出结果为:
PS D:\project\ts> node index.js
test decorator
装饰器中message:传递的消息
PS D:\project\ts>
方法装饰器
//第一个参数原型对象/构造函数,第二个参数方法的名称,第三个参数方法的描述
const funDecorator:MethodDecorator=(target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor)=>{
descriptor.value=()=>{
console.log('打印系列参数')
console.log(target)
console.log(propertyKey)
console.log(descriptor)
}
}
class FunClass{
@funDecorator
public testFun(){
}
}
const funClass:any=new FunClass();
funClass.testFun()
打印结果为:
PS D:\project\ts> node index.js
打印系列参数
{}
testFun
{
value: [Function (anonymous)],
writable: true,
enumerable: false,
configurable: true
}
PS D:\project\ts>
其中writable是说明是否可以重写,意思是类的实例是否可以覆盖这个方法,如果为false,就是不可以覆盖这个方法