Typescript裝飾器AOP示例詳解
在Typescript中使用裝飾器
上文中講了裝飾模式,今天來來介紹一些Typescript里面的裝飾器,以及如何用裝飾器來實(shí)現(xiàn)之前提及裝飾模式,裝飾器只是實(shí)現(xiàn)裝飾模式的一種方式,并非唯一
配置
在Typescript要使用裝飾器需要在tsconfig打開裝飾器的語法
"compilerOptions": {
"experimentalDecorators": true
}
類裝飾器
在Typescript中我們可以對一個class用裝飾器進(jìn)行拓展,比如下面的例子, 會打印出'target is class A'的log日志;
const injectable = () =>
(target: { new (...args: any[]): {} }) => {
console.log('target is ',target)
};
@injectable()
class A {}
在類裝飾器中我們可以獲取到這個類,從而對他進(jìn)行拓展
比如我們可以為這個類實(shí)現(xiàn)拓展
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)
方法裝飾器
方法裝飾器的語法如下,你可以獲取到當(dāng)前類,方法名,以及該屬性的描述符
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(面向切面編程)
在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:[面向切面編程],通過[預(yù)編譯]方式和運(yùn)行期間動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。
AOP是[OOP]的延續(xù),是軟件開發(fā)中的一個熱點(diǎn),也是[Spring]框架中的一個重要內(nèi)容,是[函數(shù)式編程]的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的[耦合度]降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。
這貼一段百科對AOP的簡介
下面給一個簡單的例子,我們可以對函數(shù)執(zhí)行過程進(jìn)行
const log = () => {
return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
const oldFn = descriptor.value
descriptor.value = function (...args:any[]) {
console.log('在函數(shù)執(zhí)行前');
const res = oldFn.apply(this, args);
console.log('在函數(shù)執(zhí)行后', res);
return res;
}
};
}
class A {
@log()
say() {
return 'Hello world'
}
}
new A().say()
執(zhí)行結(jié)果如下
[LOG]: "在函數(shù)執(zhí)行前"
* * *
[LOG]: "在函數(shù)執(zhí)行后", "Hello world"
以上就是Typescript裝飾器AOP示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Typescript裝飾器AOP的資料請關(guān)注腳本之家其它相關(guān)文章!
運(yùn)行結(jié)果如下,可以看到下面的數(shù)據(jù)和上方使用mysql客戶端查出來結(jié)果一致
The solution is: [{"name":"jym","age":"1"},{"name":"jym2","age":"2"},{"name":"jym3","age":"3"},{"name":"jym4","age":"4"}]
通過mysql2這個包,我們就可以用node.js連接數(shù)據(jù)庫了,可以使用一些基礎(chǔ)的API來直接操作mysql數(shù)據(jù)庫;比如上面的代碼中就執(zhí)行了'SELECT * FROM user'這個sql語句
除了使用這種基礎(chǔ)庫之外,我們還可以使用ORM(對象關(guān)系映射器)框架來連接數(shù)據(jù)庫,直接用OOP的方式來編寫模型和方法,ORM框架會幫助你生成對應(yīng)的sql語句,這樣就可以把關(guān)注點(diǎn)放在業(yè)務(wù)上面,而不用編寫SQL語句。這可以讓你的代碼更加簡潔和可維護(hù)
目前在nodejs中常用的ORM有prisma,sequlize,typeorm等等,下回我們就來嘗試一下如何用ORM來連接數(shù)據(jù)庫
以上就是Node.js連接數(shù)據(jù)庫實(shí)現(xiàn)過程詳解的詳細(xì)內(nèi)容,更多關(guān)于Node.js連接數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
- TypeScript裝飾器的作用、結(jié)構(gòu)、類型及其應(yīng)用場景(代碼示例)
- 使用TypeScript和裝飾器實(shí)現(xiàn)前端數(shù)據(jù)脫敏
- TypeScript裝飾器之項(xiàng)目數(shù)據(jù)轉(zhuǎn)換詳解
- TypeScript裝飾器與反射元數(shù)據(jù)實(shí)例詳解
- TypeScript入門之利用裝飾器擴(kuò)展代碼能力
- Typescript使用裝飾器實(shí)現(xiàn)接口字段映射與Mock實(shí)例
- TypeScript中的裝飾器用法
- TypeScript 裝飾器定義
- 淺談Typescript 裝飾器執(zhí)行順序
相關(guān)文章
jsf實(shí)現(xiàn)微信小程序簡潔登錄頁面(附源碼)
這篇文章主要介紹了實(shí)現(xiàn)微信小程序簡潔登錄頁面?,對于正在學(xué)習(xí)的小伙伴都有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-01-01
type challenge刷題之(middle 部分)示例解析
這篇文章主要為大家介紹了type challenge刷題之(middle 部分)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
TypeScript之Generics泛型類型學(xué)習(xí)
這篇文章主要為大家介紹了TypeScript之Generics泛型類型學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
TypeScript?泛型接口具體使用實(shí)戰(zhàn)
這篇文章主要為大家介紹了TypeScript?泛型接口具體使用實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解
這篇文章主要為大家介紹了TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
PureScript與JavaScript中equality設(shè)計(jì)的使用對比分析
這篇文章主要為大家介紹了PureScript中的equality與JavaScript中的equality設(shè)計(jì)對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
TypeScript中的數(shù)據(jù)類型enum?type?interface基礎(chǔ)用法示例
這篇文章主要為大家介紹了TypeScript中的數(shù)據(jù)類型enum?type?interface基礎(chǔ)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試
這篇文章主要為大家介紹了TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
TypeScript逆變之條件推斷和泛型的應(yīng)用示例詳解
這篇文章主要為大家介紹了TypeScript逆變之條件推斷和泛型的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

