Typescript類靜態部分與例項部分的區別

2021-10-23 21:44:59 字數 1568 閱讀 7535

typescript類靜態部分與例項部分的區別@toc

在學習typescript的時候在這一部分看了很久,特地把中文英文文件都看了一遍,在此寫下自己的理解

inte***ce

clockconstructor

class

clock

implements

clockconstructor

}

錯誤說clock沒有匹配signature,怎麼會這樣呢?咱們不是在類裡寫了constructor嗎?

官網給出了解釋:因為類實現介面的時候,只檢查例項部分,而類裡的constructor屬於靜態部分,所以不檢查。不能檢查他,但是你又確確實實在介面裡寫了,就報錯了

那我們一定要用類實現介面,要在介面裡用構造器簽名怎麼辦?官網再次給出了解答

看這個案例

inte***ce

clockconstructor

inte***ce

clockinte***ce

function

createclock

(ctor: clockconstructor, hour:

number

, minute:

number

): clockinte***ce

class

digitalclock

implements

clockinte***ce

tick()

}let digital =

createclock

(digitalclock,12,

17);

在這裡createclock可當作建構函式去理解,在這裡digitalclock 是implements clockinte***ce,在類裡實現了tick函式,createclock第乙個引數型別為clockconstructor。為啥這樣就行呢?因為當createclock執行的時候,會檢查第乙個引數digitalclock是不是符合clockconstructor的構造簽名,我們看到clockconstructor構造簽名返回的型別是clockinte***ce,而digitalclock正是implements clockinte***ce,所以當然是可以的

不過,理解到這裡就會想說,這也太曲線了吧,要多寫乙個介面,還要多寫乙個create建構函式,官網早就猜到了我們的心思!!!!,所以提出了另外一種簡單的方法class expression(這個部分好像沒有放在中文文件裡),到底用哪一種就看大家的選擇了

inte***ce

clockconstructor

inte***ce

clockinte***ce

const clock: clockconstructor =

class

clock

implements

clockinte***ce

tick()

};let c =

newclock(12

,4);

typescript靜態方法和抽象類

靜態方法 class person study 在學習 eat 在吃飯 static sayhello var p new person tom p.study 呼叫例項方法 person.sayhello person.name 不報錯 person.hello 報錯 多型 父類定義乙個方法,讓繼...

TypeScript類 介面 繼承

class point tostring let p new point 1,2 在ts裡,成員都預設為public。被public修飾的屬性,我們在類的內外都可以自由訪問到這些被定義的屬性。class animal new animal cat name cat 當成員被標記成private時,它...

TypeScript學習(三) 類

前篇 typescript學習 二 函式 js中的類可以看之前寫的 new操作符到底幹了什麼。接下來說說typescript中的class。在ts中class的定義方式和es6中的語法糖class很相似。class a run void getname string setname name str...