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 | A
![TypeScript で引数の文字列に応じて戻り値の型が違う関数の書き方 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/5579cf060c6566022d99479169df4cbaa1ed9b1a/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9VHlwZVNjcmlwdCUyMCVFMyU4MSVBNyVFNSVCQyU5NSVFNiU5NSVCMCVFMyU4MSVBRSVFNiU5NiU4NyVFNSVBRCU5NyVFNSU4OCU5NyVFMyU4MSVBQiVFNSVCRiU5QyVFMyU4MSU5OCVFMyU4MSVBNiVFNiU4OCVCQiVFMyU4MiU4QSVFNSU4MCVBNCVFMyU4MSVBRSVFNSU5RSU4QiVFMyU4MSU4QyVFOSU4MSU5NSVFMyU4MSU4NiVFOSU5NiVBMiVFNiU5NSVCMCVFMyU4MSVBRSVFNiU5QiVCOCVFMyU4MSU4RCVFNiU5NiVCOSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZDEwYTNlMjIyZDJhOGU3NWZiNGE2N2Y5ODQwZDlmOGU%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwcmNoODUwJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1lNjg3YjQ1NzBhMWU5Mjc2MTQxMmJlOGIzNmNjOTJiNA%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Ddc8d5992b2cfafab39b4f740be03f178)