Typescript のインターフェース、関数、名前空間はすべて同じ名前です。どれがエクスポートされているのでしょうか? 質問する

Typescript のインターフェース、関数、名前空間はすべて同じ名前です。どれがエクスポートされているのでしょうか? 質問する

Typescript定義ファイル(DefinitelyTyped)調べてみると、まったく同じ名前を持つインターフェース、関数、名前空間が存在します: twilio

以下はファイルの最初の数行のサンプルです。

declare interface twilio {
  (sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient
}

declare function twilio(sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient;

declare namespace twilio {
 ....

そしてファイルの一番下にはこう書いてある

export = twilio;

さて、どれをエクスポートするのでしょうか? インターフェース、関数、それとも名前空間でしょうか?

これはどういう意味ですか?

同じスコープ/名前空間内で複数のものにまったく同じ名前を付けるにはどうすればよいですか?

ベストアンサー1

@ppp の回答を展開

宣言のマージとは、TypeScript コンパイラーが、同じ名前を持つ 2 つ以上の型を 1 つの宣言にマージすることです。

覚えておくべき重要なことは、クラスとクラスを結合することはできないということです。

たとえば、次のマージが許可されます:

interface User {
  name: string;
}

interface User {
  age: number;
}

interface User {
  height: number;
}

class Person implements User {
  name = "John"
  age = 30;
  height = 180
}

enum User {...}

namespace User {...}

const person = new Person();
console.log(person) // {name: "John", age: 30, height: 180}

export person;

したがって、あなたの質問に答えるために、上記の例のように単一の型をエクスポートすることができ、残りの宣言はそれらの間でマージされます。

おすすめ記事