一. 類的特性
這裏直接寫一些demo來實現ts裏的類並解釋一些小知識:
//實現一個類,並繼承它
class Person {
// 構造方法,實例化之後自動調用,且一次實例化只調用一次
constructor() {
console.log(this.name);
}
//public 表示公共的,可在任何訪問
public name = 'dahai'; // 等同於name;
//protected 表示受保護的,在類的內部和子類中可以訪問
protected age = 16;
//private 表示私有的,只有在類的內部可以訪問
private sex = '女'
protected play() {
console.log('xixi')
}
}
// extends 繼承的關鍵字,繼承後的類有可以使用有權限的父類的所有屬性和方法
class Buy extends Person {
// 繼承時要注意,如果子類也有構造函數,必須實現父類的構造函數,使用super來實現
constructor (public code:number) {
super();
this.code = code;
}
//super用法二,調用父類中的方法
work () {
super.play()
}
}
var b1 = new Buy(3);
console.log(b1.name)
b1.work();
var p1 = new Person();
console.log(p1.name);
構造函數的一些其他寫法
//這個類似於上面constructor寫法
class Person {
//此處的public name: string不能簡寫爲name:string
constructor(public name: string) {
console.log(this.name);
}
}
// 注意如果construtor中有參數時,new必須傳對應的參
var p1 = new Person('xiaolei');
二. 泛型
這篇文章寫的很清晰,大家看看哈
https://blog.csdn.net/jasnet_u/article/details/81144199
三. 接口
我自己理解的接口其實就是一種特殊的類,建立了某種代碼約定,使別的開發者在調用某個方法時必須遵循接口的代碼約定;但接口是不能實例化的,不過可以通過implements關鍵字來實現它。
下面來個簡單的demo瞭解一下interface
//這裏是類 類型的接口
interface Person {
name: string
age: number
sex?: string
//添加一個字符串索引簽名跳過額外屬性檢查
[propName: string]: any;
eat():void;
}
class Buy {
constructor (public config:Person) {
}
}
/*
*必傳參數:
*這裏如果我們傳遞的參數不是name、age則ts報錯,少參數多參數都不行;這是ts的額外屬性檢查,要想跳過最好的方法是添加一個字符串索引簽名見上
*可選參數:sex後面加?,表示可選參數,可傳可不傳
var b1 = new Buy({
name: 'dahai',
age: 8
});
//實現person接口
class PeopleOne implements Person {
name = 'dalei'
age = 9
eat(): void {
console.log(this.name)
}
}
var a1 = new PeopleOne;
a1.eat();
四. 模塊
模塊中這裏我主要記錄一下如何導入導出,這大家應該也都很熟悉了吧,這裏簡單寫一下,一起來看看哈。
//a.ts
export var prop1;
export function func1 () {
}
export classs Clazz1 () {
}
//在需要使用的文件中,eg:b.ts
import {prop1, func1, Clazz1 } from './a.ts'
console.log(prop1)
func1()
new Clazz1 ()