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