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...