- 基礎(chǔ)聲明:和
interface
很像
- 區(qū)別:
- interface只有成員的類型沒有實(shí)現(xiàn)以及初始化
- class需要同時(shí)有成員的
類型和實(shí)現(xiàn)
interface PointInterface {
x: number
y: number
}
const p1:PointInterface = {
x: 1,
y: 2
}
// 要有默認(rèn)值廊鸥,不然嚴(yán)格模式下 ts 會報(bào)錯(cuò)
class PointClass {
// 這里的意思是初始化的時(shí)候 this.x = 0,和寫在 constructor 的意思是一樣的背传,都是進(jìn)行初始化
x:number = 0
y:number = 0
}
// ---or---
class PointClass {
x: number
y: number
constructor(x = 0, y = 0){
this.x = x
this.y = y
}
}
const p2 = new PointClass(1,2)
console.log(p2)
- 上述聲明簡化:每個(gè)參數(shù)都要加
public
脯爪,并且public
只能用于typescript
class PointClass {
constructor(public x = 0,public y= 0){}
}
const p = new PointClass()
console.log(p)
-
constructor
也可以用重載
-
class
也可以使用索引簽名
class Hash {
[s:string]: unknown
set(key:string,value:unknown){
this[key] = value
}
get(key:string){
return this[key]
}
}
-
class
實(shí)現(xiàn)接口
:implements
羡疗,實(shí)現(xiàn)
的意思就是你有的我都有
。但是interface里的可選屬性
,在class
也依然要實(shí)現(xiàn)梭伐,不然使用時(shí)會報(bào)錯(cuò)
interface Person{
name: string
sayHi: (target: Person) => void
}
// User的類型只要是Person的子集就行获黔,即被Person類型兼容就可以
class User implements Person{
constructor(public name:string){
}
sayHi(target:Person){
console.log(`Hi, ${target.name}`)
}
}
const user = new User('frank')
console.log(user.name)
-
class
還可以實(shí)現(xiàn)多個(gè)接口
蚀苛,方法和一個(gè)接口類似,就是全部完善就行
-
class繼承class
:
class Person {
constructor(public name:string){}
sayHi(){
console.log(`Hi, I am ${this.name}`)
}
}
class User extends Person {
id: number
constructor(name:string,id: number){
super(name) // 執(zhí)行父類的構(gòu)造函數(shù)
this.id = id
}
login(){}
sayHi(target?: User){
if(target === undefined){
super.sayHi()
}else{
console.log('我是 User 的 sayHi')
}
}
}
const user = new User('frank',1)
user.sayHi() // Hi, I am frank
user.sayHi(user) // 我是 User 的 sayHi
console.log(user)
class Person {
friend?: Person
constructor(public name:string,friend?:Person){
this.friend = friend
}
}
class User extends Person{
declare friend?: User
constructor(name:string,friend?:User){
super(name,friend)
}
}
const u1 = new User('frank')
const u2 = new User('ricky',u1)
console.log(u2.friend) // User 類型玷氏,不加declare的話堵未,friend就是父類Person類型