[英]Using JavaScript Class Mixins with TypeScript Declaration Files
[英]Typescript declaration files contain class definitions with no member implementations
當我查看Backbone聲明文件時,我看到:
export class Router extends Events {
...
constructor (options?: RouterOptions);
initialize (options?: RouterOptions);
...
}
以及其他類沒有實現的方法定義的地方。 我認為這種語法是為接口保留的。 編譯器允許它傳入聲明文件,但不傳入我自己的ts文件。
.d.ts與.ts擴展的編譯規則之間是否存在差異? 如果是這樣,這些類的類應該如何以不同的方式使用?
.d.ts
文件用於描述某些類的現有 JavaScript或TypeScript實現。
.d.ts
一個類(我將它稱為“ declare class
”,因為它們是等價的)與虛擬類或接口完全不同。 當你聲明一個declare class
,你會說“還有一些其他類會出現這種形狀”。 當您extend
該類時,編譯器將假定在運行時存在一個類(或類似於類似的東西)並且該名稱在原型鏈中用作下一個指針時發出代碼。
舉個例子,這個代碼(單獨) 不起作用 - 你會得到一個運行時錯誤,因為Foo
沒有在任何地方定義:
declare class Foo { public bar(): void; }
class FooDerived extends Foo { }
另一方面,這段代碼很好:
interface Foo { bar(): void; }
class FooImpl implements Foo { public bar() {} }
如果文件具有.d.ts
擴展名,則所有類都被視為前面有一個declare
關鍵字。 聲明不需要實現,它們只提供類型信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.