這是我參與8月更文挑戰的第5天,活動詳情查看:8月更文挑戰前端
由於Typescript的持續火爆,分享下TS的經常使用知識點,咱們一塊兒學習交流,一塊兒加油!算法
1.修飾符typescript
1.public 表明公有,不論內部仍是外部均可以訪問express
2.protected 表明保護,只有子類和本身能夠訪問json
3.private 表明私有,只有本身能夠訪問markdown
2.readonly 只讀屬性網絡
3.static 靜態屬性,可使用類直接訪問app
4.extends 繼承ide
5.super 表明父類,能夠調用父類的方法函數
class Person {
// 公有屬性
public readonly name: string;
public age: number;
private id: string = "id";
protected gender: string = "male";
public static email: string = "test@test.com";
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
// 若是不想在構造函數以前聲明變量可使用下面的方式
// constructor(public name: string, public age: number) {
// this.name = name;
// this.age = age;
// }
protected getName(): string {
return this.name;
}
getAge(): number {
return this.age;
}
setAge(age: number): void {
this.age = age;
}
getId(): string {
return this.id;
}
}
class PoliceMan extends Person {
// 由於這邊name和age都是父類繼承過來,全部能夠不用聲明
constructor(name: string, age: number) {
// 執行super方法來調用父類的 constructor
super(name, age);
}
private policeNo: string = "11111";
printId() {
// 由於id是私有屬性,因此這裏會報錯
// console.log(this.id)
}
printGender() {
// 由於是保護屬性 因此這裏能夠取到父類的gender屬性
console.log(this.gender);
}
}
const person = new Person("Tom", 20);
// 能夠任意訪問公有屬性
console.log(person.name); // Tom
// readonly屬性不能被複制
// person.name='Cherry';
// 訪問static靜態屬性
console.log(Person.email); // test@test.com"
// 沒法訪問 私有屬性
// console.log(person.id)
// 若是要訪問只能經過內部的方法
console.log(person.getId()); // id
const policeMan = new PoliceMan("David", 30);
//若是要訪問父類的 protect 屬性不能在外部訪問 只能在調用方法訪問
console.log(policeMan.printGender());
// 訪問父類的靜態方法
console.log(PoliceMan.email);
複製代碼
裝飾器是一種特殊類型的聲明,它可以被附加到類聲明,方法, 訪問符,屬性或參數上。
裝飾器使用 @expression這種形式,expression求值後必須爲一個函數,它會在運行時被調用,被裝飾的聲明信息作爲參數傳入
注意:要是用裝飾器,必須在tsconfig.json中 設置experimentalDecorators 爲true
"compilerOptions": {
"experimentalDecorators": true,
}
類的構造函數是其惟一的參數
// 經過類裝飾器返回一個新的class
function classDecorator(constructor: Function) {
return class {
name: string = "David";
age: number = 11;
};
}
@classDecorator
class Animal {
name: string = "Tom";
}
const animal = new Animal();
// 這裏ts的默認推導不出來,因此使用了斷言來強轉
console.log((animal as any).age); //11
function classDecoratorFactor(name: string) {
return function (constructor: Function) {
constructor["gender"] = "male"; // 這裏至關於給給類的static上覆制
// 給對象的原型鏈上的name複製
constructor.prototype.name = name;
// 給對象的原型鏈上的添加setName方法
constructor.prototype.getName = function (): string {
return name;
};
};
}
// 類型裝飾器工廠
@classDecoratorFactor("River")
class Person {
static gender: string;
name: string;
getName() {}
}
const person = new Person();
console.log(person.name); //River
console.log(person.getName()); //River
console.log(Person.gender); //male
複製代碼
對方法進行裝飾,返回的值是
1.對於static成員員來講是類的構造函數,對於實例成員是類的原型對象。
2.成員的名字。
3.成員的屬性描述符。
function decoratorMethod(str: string) {
return function (proto: any, key: string, descriptor: PropertyDescriptor) {
// 重寫方法
descriptor.value = function () {
return str;
};
};
}
class SaleMan {
@decoratorMethod("women")
say() {
// console.log("I am sale man ");
}
}
const saleMan = new SaleMan();
console.log(saleMan.say());
複製代碼
對方法進行裝飾,返回的值是
1.對於靜態成員來講是類的構造函數,對於實例成員是類的原型對象。*
2.成員的名字。
function decoratorProperty(str: string) {
return function (proto: any, key: string): any {
const descriptor: PropertyDescriptor = {
writable: true,
};
proto[key] = str;
return descriptor;
};
}
class BusinessMan {
@decoratorProperty("BusinessWoman")
name: string;
}
const businessMan = new BusinessMan();
//獲取原型上的name
console.log((businessMan as any).__proto__.name);
複製代碼
對方法進行裝飾,返回的值是
1.對於靜態成員來講是類的構造函數,對於實例成員是類的原型對象。
2.成員的名字。
3.參數在函數參數列表中的索引。
function addAge(target: any, propertyKey: string, paramIndex: number) {
console.log(propertyKey)
console.log(paramIndex)
}
class Person2 {
// 參數裝飾器
showName(@addAge name: string) {
}
}
const person2=new Person2();
person2.showName('Dannie');// 打印 showName 和
複製代碼
你們喜歡的能夠看看個人專欄 (TypeScript經常使用知識) 我會盡可能保持天天晚上更新,若是喜歡的麻煩幫我點個贊,十分感謝
你們若是喜歡「算法」的話,能夠看看我分享的另一個專欄(前端搞算法)裏面有更多關於算法的題目的分享,但願能幫助你們更深的理解算法
文章內容目的在於學習討論與分享學習算法過程當中的心得體會,文中部分素材來源網絡,若有侵權,請聯繫刪除,郵箱 182450609@qq.com