宣言空間

TypeScriptには、_変数_宣言空間と_型_宣言空間という2つの宣言空間があります。これらの概念については以下で解説します。

型宣言空間

型宣言空間には型アノテーションとして使用できるものが含まれています。例えば以下は型宣言です:

class Foo {};
interface Bar {};
type Bas = {};

これは、 FooBarBasなどを型名として使用できることを意味します。例:

var foo: Foo;
var bar: Bar;
var bas: Bas;

あなたが interface Barを持っていても、_変数宣言空間_に宣言されないので変数として使うことはできません。これを以下に示します。

interface Bar {};
var bar = Bar; // ERROR: "'Bar'が見つかりません"

cannot find nameと言うのは、_変数_宣言空間にBarという名前が宣言されていないからです。それは次のトピック「変数宣言空間」につながります。

変数宣言空間

変数宣言空間には、変数として使用できるものもあります。class Fooは、型宣言空間にFoo型を宣言することを見てきました。驚かないでください。それは、_変数_宣言空間に対して、変数_Foo_を宣言します:

class Foo {};
var someVar = Foo;
var someOtherVar = 123;

クラスを変数として渡したいことがあるので、これは素晴らしいことです。覚えておくこと:

  • 型宣言空間にしか宣言されない interface のようなものを変数として使うことはできません

同じように、var を使って宣言したものは_変数_宣言空間だけに宣言されるので、型アノテーションとして使うことはできません:

var foo = 123;
var bar: foo; // ERROR: "'foo'が見つかりません"

cannot find nameというエラーが発生する理由は、_型_宣言空間でfooという名前が定義されていないからです。

最終更新