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

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

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

image2

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

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

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

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

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

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

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

image3

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

const walkSpeed =  new WalkSpeed.Speed(4);

image4

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

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

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

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

image5

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

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

image6

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

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

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

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

image7

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

image8

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

ブログ一覧