Typescript装饰器AOP示例详解

 更新时间:2022年12月14日 09:40:46   作者:鱼露  
这篇文章主要为大家介绍了Typescript装饰器AOP示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

在Typescript中使用装饰器

上文中讲了装饰模式,今天来来介绍一些Typescript里面的装饰器,以及如何用装饰器来实现之前提及装饰模式,装饰器只是实现装饰模式的一种方式,并非唯一

配置

在Typescript要使用装饰器需要在tsconfig打开装饰器的语法

"compilerOptions": {
  "experimentalDecorators": true
}

类装饰器

在Typescript中我们可以对一个class用装饰器进行拓展,比如下面的例子, 会打印出'target is class A'的log日志;

const injectable = () =>
  (target: { new (...args: any[]): {} }) => {
    console.log('target is ',target)
  };
@injectable()
class A {}

在类装饰器中我们可以获取到这个类,从而对他进行拓展

比如我们可以为这个类实现拓展

const AddName =  (name: string) => (cls: { new (...args: any[]): {} }) => {
   cls.prototype.name = name
}
@AddName('name')
class A {
    age = 18
}
const a = new A()
console.log(a.name)
console.log(a.age)

方法装饰器

方法装饰器的语法如下,你可以获取到当前类,方法名,以及该属性的描述符

const log = () => {
    return  (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
        console.log(target, propertyKey, descriptor)
    };
}
class A {
    @log
    say() {}
}

打印如下

A: {},  "say",  {
  "writable": true,
  "enumerable": false,
  "configurable": true

那么方法装饰器可以用来做什么呢?
AOP就是其中一个例子

AOP(面向切面编程)

在软件业,AOP为Aspect Oriented Programming的缩写,意为:[面向切面编程],通过[预编译]方式和运行期间动态代理实现程序功能的统一维护的一种技术。

AOP是[OOP]的延续,是软件开发中的一个热点,也是[Spring]框架中的一个重要内容,是[函数式编程]的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的[耦合度]降低,提高程序的可重用性,同时提高了开发的效率。

这贴一段百科对AOP的简介
下面给一个简单的例子,我们可以对函数执行过程进行

const log = () => {
    return  (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
        const oldFn = descriptor.value
        descriptor.value = function (...args:any[]) {
            console.log('在函数执行前');
            const res = oldFn.apply(this, args);
            console.log('在函数执行后', res);
            return res;
        }
    };
}
class A {
    @log()
    say() {
        return 'Hello world'
    }
}
new A().say()

执行结果如下

[LOG]: "在函数执行前"  

* * *

[LOG]: "在函数执行后", "Hello world"

以上就是Typescript装饰器AOP示例详解的详细内容,更多关于Typescript装饰器AOP的资料请关注脚本之家其它相关文章!

运行结果如下,可以看到下面的数据和上方使用mysql客户端查出来结果一致

The solution is:  [{"name":"jym","age":"1"},{"name":"jym2","age":"2"},{"name":"jym3","age":"3"},{"name":"jym4","age":"4"}]

通过mysql2这个包,我们就可以用node.js连接数据库了,可以使用一些基础的API来直接操作mysql数据库;比如上面的代码中就执行了'SELECT * FROM user'这个sql语句

除了使用这种基础库之外,我们还可以使用ORM(对象关系映射器)框架来连接数据库,直接用OOP的方式来编写模型和方法,ORM框架会帮助你生成对应的sql语句,这样就可以把关注点放在业务上面,而不用编写SQL语句。这可以让你的代码更加简洁和可维护

目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等,下回我们就来尝试一下如何用ORM来连接数据库

以上就是Node.js连接数据库实现过程详解的详细内容,更多关于Node.js连接数据库的资料请关注脚本之家其它相关文章!

相关文章

  • TypeScript判断对称的二叉树方案详解

    TypeScript判断对称的二叉树方案详解

    这篇文章主要为大家介绍了TypeScript判断对称的二叉树方案实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Manipulation-TypeScript DOM操作示例解析

    Manipulation-TypeScript DOM操作示例解析

    这篇文章主要为大家介绍了DOM Manipulation-TypeScript DOM操作示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • TypeScript手写一个简单的eslint插件实例

    TypeScript手写一个简单的eslint插件实例

    这篇文章主要为大家介绍了TypeScript手写一个简单的eslint插件实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • typescript快速上手的进阶类型与技术

    typescript快速上手的进阶类型与技术

    本文讲述了typescript开发的一些高级的类型与技术,算是对于基础知识点的补充,具体内容包括:比如元组、枚举类、接口、泛型相关概念等。虽说是进阶,但是内容不算多也并不难理解。
    2022-12-12
  • typescript 支持与本地调试配置详解

    typescript 支持与本地调试配置详解

    这篇文章主要为大家介绍了typescript 支持与本地调试配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • layui.layer弹出层(子页面)改变父页面内容(访问元素和函数)

    layui.layer弹出层(子页面)改变父页面内容(访问元素和函数)

    当前页面(父框架或父页面)使用layer以iframe层的方式弹出新的窗口(子框架或子页面)时,如何在子页面中访问父页面的元素和函数,从而改变父元素的页面显示,给用户合理舒适的体验。
    2023-02-02
  • TypeScript快速学习入门基础语法

    TypeScript快速学习入门基础语法

    TypeScript的基础语法,包括变量声明、复合类型(数组和对象)、条件控制(if-else和switch)、循环(for和while)、函数(基础和箭头函数,以及可选参数)、面向对象特性(枚举、接口、继承)以及模块开发中的导出和导入
    2024-07-07
  • TypeScript与JavaScript的区别分析

    TypeScript与JavaScript的区别分析

    TypeScript可以使用JavaScript中的所有代码和编程概念,TypeScript是为了使JavaScript的开发变得更加容易而创建的。推荐先精通JS的的前提下再学习TS,这样更有利于同时学习两门语言。
    2022-12-12
  • TypeScript防抖节流函数示例详解

    TypeScript防抖节流函数示例详解

    这篇文章主要为大家介绍了TypeScript防抖节流函数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • d3-scale d3-scaleTime使用示例详解

    d3-scale d3-scaleTime使用示例详解

    这篇文章主要为大家介绍了d3-scale d3-scaleTime使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论