TypeScript中class類型實例講解
class類型
TypeScript支持ES引入的class關鍵字,并為其添加了類型注解和其他語法(例如:可見性修飾符)。
class person {
// 聲明初始值,可省略類型注解(TS類型推論為string)
name:'張三'
// 聲明成員類型為 number 沒有初始值
age: number
}
const p = new person()
p.name
p.age構造函數
在class構造函數中,需要為構造函數指定類型注解,否則會被隱式推斷為any,構造函數不需要返回值類型。
class Person {
name:string
age:number
constructor(name:string,age:number){
this.name = name
this.age = age
}
}
const p = new Person('張三',18)在class的實例方法中,方法的類型注解(參數與返回值)與函數用法相同。
class Point {
x=1
y=2
scale(n: number){
this.x*=n
this.y*=n
}
}
const p = new Point()
p.scale(5)
console.log(p.x,p.y);// 5 10class類的繼承
在class類的繼承中,提供了兩種類的繼承方式:1、extends(繼承父類) 2、implements(實現接口)。注意:JS中只有extends,而implements是TS提供的。
class Animal {
move(){
console.log('我是動物');
}
}
// 使用 extends 繼承父類
class Dog extends Animal {
name='狗'
say(){
console.log('我是狗');
}
}
const p = new Dog()
p.move()// 我是動物
p.say()// 我是狗
console.log(p.name);// 狗interface Animals {
name: string
say(): void
}
// Dog類繼承接口Animals,意味著Dog類必須提供Animals接口中指定的所有方法和屬性
class Dog implements Animals {
name = 'hobble'
say(): void {
console.log('汪汪汪');
}
}可見修飾符
在class中,類的可見性可以使用TS來控制class的方法或屬性對于class外的代碼是否可見??梢娦孕揎椃ǎ?strong>public(公有的)、protected(受保護的)、private(私有的)。
class Animal1 {
// 因為 public 是默認可見的,所以可以直接忽略
public move(){
console.log('我是動物');
}
}
class Dog1 extends Animal1 {}
const p1 = new Dog1()
p1.move()// 我是動物
class Animal2 {
// 僅對其聲明的所在類和子類中(非實例對象)可見
protected move(){
console.log('我是動物');
}
run(){
this.move
}
}
class Dog2 extends Animal2 {
say(){
this.move
}
}
const p2 = new Dog2()
// p.move() 報錯
class Animal3 {
// private表示私有的,只在當前類中可見,對實例對象以及子類是不可見的
private move(){
console.log('我是動物');
}
run(){
this.move
}
}
class Dog3 extends Animal3 {
say(){
// this.move 報錯
}
}只讀修飾符
除了可見修飾符之外,還有一個常見的修飾符就是:readonly(只讀修飾符)。readonly:表示只讀,用來防止在構造函數之外對屬性進行賦值。
class Person {
// 注意:只要是readonly來修飾的屬性,必須手動提供明確屬性,否則就是字面量類型
readonly age: number = 18
constructor(age: number){
this.age = age
}
setAge(){
// 無法分配到 "age" ,因為它是只讀屬性。
// this.age = 20
}
}注意:readonly只能修飾屬性不能修飾方法。

在接口和{}表示的對象類型中,也可以使用 readonly 。
// 在接口中
interface People {
readonly name: string
}
let obj: People = {
name:'張三'
}
// obj.name = '李四' 報錯
// 在對象中
let oj: { readonly name: string } = {
name:'張三'
}
// oj.name = '李四' 報錯總結
到此這篇關于TypeScript中class類型實例講解的文章就介紹到這了,更多相關TypeScript class類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript中for of和for in的區(qū)別詳解
對于初學者,我們或許只知道無論是for of還是for in他們都有一個功能那就是遍歷,至于具體的細節(jié)或許我們不是很清楚,那么接下來我們就來詳細的區(qū)分一下for of和for in他們之間的不同點和相同點,需要的朋友可以參考下2023-06-06

