关于typescript中类属性装饰器的正确用法,截止2024-09-13,ts版本5.4.5,掘金上没一个正确的

73 阅读1分钟

看了很多ts,类属性装饰器的用法都是错误的,研究半天找到了正确用法吗,分享一下

正确用法

1. 装饰器上传参

import ts from 'typescript'

function logged(value) {
    return (target, {kind, name}) => {
        return function (initialValue) {
            console.log(value)   //66
            console.log(target)   //undefined
            console.log(kind)   //field
            console.log(name)   //x
            console.log(initialValue) //1
            return value;
        };
    }
}

class C {
    @logged(66) x = 1;
}

const newc = new C()


console.log(ts.version);  // 5.4.5
console.log(newc.x); //66

结果

image.png

2.装饰器不传参

import ts from 'typescript'

function logged(target, {kind, name}) {
    return function (initialValue) {
        console.log(target)   //undefined
        console.log(kind)   //field
        console.log(name)   //x
        console.log(initialValue) //1
        return 66;
    };
}

class C {
    @logged x = 1;
}

const newc = new C()


console.log(ts.version);  // 5.4.5
console.log(newc.x); //66

结果

image.png

正确但不完整的参考

TypeScript 5.0 beta 发布:新版 ES 装饰器、泛型参数的常量修饰、枚举增强等

错误或者过时的参考

我还尽量看的近一年的文章,还都是错的,我都怀疑作者们自己验证没有,很气,所以挂下文章

过时 1.

前端想了解后端?那得先学会 TypeScript 装饰器!

过时 2.

一文搞懂 TypeScript 装饰器

过时 3.

前端冷知识-装饰器