TypeScript でどう書くの?と聞かれたので、書いてみた。
type NameType = 'name'
type AgeType = 'age'
function query(t: NameType): string
function query(t: AgeType): number
function query(t: NameType | AgeType): any {
if (t === 'name') {
return 'わたしです'
} else if (t === 'age') {
return 24
}
}
let name = query('name') // name is string
let age = query('age') // age is number
基本的な方針は Handbook > Functions > Overloads に従って、型判定のところを単純に文字列と比較しています。
NameType | AgeType | AddressType | ...
……のように増えてきたら type AllTypes = NameType | AgeType | AddressType | ...
のようにして function query(t: AllTypes)
のようにするとよいでしょう。