munieru_jp
@munieru_jp (ムニエル)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

TypeScriptのリテラル型のような仕組みがある言語は他にありますか?

Q&A

Closed

TypeScriptの型システムには、リテラル型という仕組みがあります。

const message = 'Hello'

このとき、messageの型はstringではなく、より具体的な"Hello"として推論されます。

"Hello"型はstring型のサブタイプなので、当然string型のメソッドが使えます。

console.log(message.toUpperCase())  // HELLO

リテラル型によって、あらかじめとりうる値が限られている引数の型を制限することができます。

const sayHello = (lang: 'en' | 'ja'): void => {
  switch (lang) {
    case 'en':
      console.log('Hello')
      break
    case 'ja':
      console.log('こんにちは')
      break
  }
}

sayHello('en')
sayHello('ja')
sayHello('fr')  // Error

また、他の言語におけるEnumのようなものをつくることができます。

type Language = 'en' | 'ja'

const sayHello = (lang: Language): void => {
  switch (lang) {
    case 'en':
      console.log('Hello')
      break
    case 'ja':
      console.log('こんにちは')
      break
  }
}

sayHello('en')
sayHello('ja')

このように大変便利なリテラル型ですが、他にもこのような仕組みを持つプログラミング言語はあるのでしょうか。

1

1Answer

Scala には final val message = "Hello" すると messageString("Hello") 型になる仕様があるようです。

Python 3 の型ヒントではリテラル型を Literal["Hello"] と書けます。

4Like

Your answer might help someone💌