【TypeScript】名前空間とは何ですか?
TypeScript

【TypeScript】名前空間とは何ですか?

作成日:2021年08月16日
更新日:2021年08月17日

例えば、歩く速さと車の速さのための Speed クラスがあったとします。

ts
class Speed {
constructor(walk: number) {}
}
class Speed {
constructor(car: number) {}
}

image2

Speedクラスが重複しているので、エラーになっております。

同じクラス名で使っている場合、名前空間を使えば、エラーが解消されます。

書き方は、クラスを『namespace 〇〇』で囲ってあげます。

〇〇の中は、それぞれ別の名前が入ります。

ts
namespace WalkSpeed {
class Speed {
constructor(walk: number) {}
}
}
namespace CarSpeed {
class Speed {
constructor(car: number) {}
}
}

歩く速さを表示しようとしたのですが、『この式はコンストラクト可能ではありません。型 'typeof WalkSpeed' にはコンストラクト シグネチャがありません。』というエラーが発生しています。

image3

こちらのエラーを解消するには、WalkSpeed の前に名前空間を指定します。

ts
const walkSpeed = new WalkSpeed.Speed(4);

image4

エラーの内容が変わりました。

次に、classの前に『export』を追加します。

ts
namespace WalkSpeed {
export class Speed {
constructor(walk: number) {}
}
}
namespace CarSpeed {
export class Speed {
constructor(car: number) {}
}
}

image5

エラーが解除されました。

console.log()で確認すると、

image6

またエラーが発生し、『プロパティ 'walk' は型 'Speed' に存在しません。』と表示されました。

walk の前にアクセス修飾子がないことが原因ですので、『public』を追加します。

ts
namespace WalkSpeed {
export class Speed {
constructor(public walk: number) {}
}
}
namespace CarSpeed {
export class Speed {
constructor(public car: number) {}
}
}

image7

エラーが解除されました。

image8

console.log()にも結果が表示されました。

© 2024あずきぱんウェブスタジオ