Next.js使用装饰器decorator 解决[作为表达式调用时,无法解析类修饰器的签名。]

这篇具有很好参考价值的文章主要介绍了Next.js使用装饰器decorator 解决[作为表达式调用时,无法解析类修饰器的签名。]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Next.js 会自动检测 jsconfig.json tsconfig.json 中的experimentalDecorators
tsconfig.json

{
  "compilerOptions": {
   //...
    "experimentalDecorators": true
  }
}

然后重启服务 否则装饰器无法识别
不声明的话vscode 执行 ts检测 也会报错作为表达式调用时,无法解析类修饰器的签名。

支持的四种装饰器

declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;
declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;

类装饰器

function cameraDecorator<T extends { new (...args: any[]): {} }>(
    constructor: T
) {
    return class extends constructor {
        camera = ThreeHelper.instance.camera;
        cameraWrapper = ThreeHelper.instance.camera.parent;
    };
}

@cameraDecorator<typeof Asteroids>
class Asteroids {
    private camera!: THREE.PerspectiveCamera;
    private cameraWrapper!: THREE.Object3D;
}

也可以这样写 下方写法可以将属性写在当前class上

export function UnrealBloomEffect<T extends { new (...args: any[]): {} }>(
    constructor: T
) {
    return class extends constructor {
        name: string;
        constructor(...rest: any[]) {
            super(...rest);
            this.name = "deo";
        }
        render() {
            throw new Error("先执行initEffect");
        }
	}
}

如果是写在constructor.property上则可能写到Object上污染object基类文章来源地址https://www.toymoban.com/news/detail-631641.html

到了这里,关于Next.js使用装饰器decorator 解决[作为表达式调用时,无法解析类修饰器的签名。]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Angular Decorator 装饰器介绍

    装饰器的作用就是在添加装饰器的地方在不改动原有代码的情况下增加额外的功能。Angular框架中装饰器是一个函数。他将元数据添加到类、类成员(属性、方法)和函数参数上。让它们在不需要做任何代码变动的前提下增加额外功能。 装饰器是什么 它是一个表达式 该表达式被

    2024年02月16日
    浏览(44)
  • 【算法】使用栈解决一系列算法题(匹配、表达式、模拟)(C++)

    栈适合解决需要 后进先出(LIFO) 的结构的算法题,例如: 括号匹配问题 :判断给定字符串中括号是否匹配。 表达式求值问题 :将表达式转换为后缀表达式,并计算其值。 逆波兰表达式问题 :将表达式转换为逆波兰表达式,并计算其值。 直方图最大矩形面积问题 :给定

    2024年01月16日
    浏览(36)
  • 【设计模式】01-装饰器模式Decorator

    作用:在不修改对象外观和功能的情况下添加或者删除对象功能,即给一个对象 动态附加职能 装饰器模式主要包含以下角色。 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其

    2024年02月22日
    浏览(42)
  • 使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)

    我们在使用SpringMVC从前端接受传递过来的日期数据时,默认传递过来的数据是String类型,如果我们从前端传递过来的数据格式是yyyy/MM/dd,SpringMVC有内置类型转化器会将String类型自动转化成Date类型。但如果我们从前端传递过来的数据格式是yyyy-MM-dd,SpringMVC的内置转化器就不能

    2024年02月08日
    浏览(52)
  • quarkus依赖注入之八:装饰器(Decorator)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇是《quarkus依赖注入》系列的第八篇,目标是掌握quarkus实现的一个CDI特性:装饰器(Decorator) 提到装饰器,熟悉设计模式的读者应该会想到装饰器模式,个人觉得下面这幅图很好的解释了装饰器

    2024年02月14日
    浏览(41)
  • js 正则表达式

    不允许汉字  state.rulesForm.username = value.replace(/[u4e00-u9fa5]/gi, \\\"\\\"); 只允许数字和字母 state.rulesForm.username = value.replace(/[^a-zA-Z0-9]+/g, \\\"\\\"); 只允许数字 state.rulesForm.qlmId = value.replace(/[^0-9]/g, \\\"\\\"); 只允许数字和字母和符号 this.form.username = this.form.username.replace(/[^a-zA-Z0-9@#$%^*()._+=?-,]+/g,

    2024年02月08日
    浏览(47)
  • js之正则表达式

    正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法,以及 String 的 match、matchAll、replace、search 和 split 方法。 灵活性、逻辑性和功能性非常的强。 可以迅速地用极简单的方式达到字符串的

    2024年02月09日
    浏览(46)
  • js---三元表达式详解

    三元表达式是JS中最为常用的快捷判断语句之一。其语法形式为: 当判断条件成立时,返回结果1,否则返回结果2。这是JS中最为基本的三元表达式形式。 在实际应用中,三元表达式可用于快速判断三个条件,如下所示示例代码: 以上代码的意思是:当成绩大于90分时,返回

    2024年02月03日
    浏览(62)
  • JS -- 正则表达式教程

    ECMAScript 通过 RegExp 类型支持正则表达式。 上面两种是等价的正则表达式 g: 执行全局匹配(查找所有匹配,而非在找到第一个匹配后停止) i: 忽略大小写 m: 多行匹配(第一行末尾结束后会在下一行连续匹配) 测试字符是否满足正则表达式规则,返回 true / false 找到满足正则

    2024年01月17日
    浏览(45)
  • 设计模式-6--装饰者模式(Decorator Pattern)

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,即装饰者,来包含原始对象,并在其上添加额外的行为或功能。这样,你可以在运行时选择不同的装饰者组合来实现不

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包