2

バックボーン宣言ファイルを見ると、次のように表示されます。

export class Router extends Events {
    ...
    constructor (options?: RouterOptions);
    initialize (options?: RouterOptions);
    ...
}

クラスに実装のないメソッド定義があるその他の場所。この構文はインターフェイス用に予約されていると思いました。コンパイラは、これを宣言ファイルに渡しますが、自分の ts ファイルには渡しません。

.d.ts と .ts拡張子コンパイル規則に違いはありますか? もしそうなら、これらのタイプのクラスはインターフェイスとは異なる方法で使用する必要がありますか?

4

2 に答える 2

11

.d.tsファイルは、いくつかのクラスの既存のJavaScript または TypeScript 実装を記述するためのものです。

a 内のクラス(同等なので.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() {} }
于 2013-01-14T17:41:36.607 に答える
3

ファイルに拡張子がある場合、すべてのクラスはキーワード.d.tsが前に付いているかのように扱われます。declare宣言は実装を必要とせず、型情報を提供するだけです。

于 2013-01-14T09:28:28.413 に答える