[TypeScript] 同じプロパティを持つオブジェクトを異なる型で表現したい
Q&A
Closed
解決したいこと
TypeScriptで、同じプロパティを持つオブジェクトを異なる型で表現したい。
例えば、特定サービスへの接続オプションが複数パターンある状況について、そのパターンをそれぞれ型で表現したいと思っています。
使用すべき接続オプションを型で表明し、使用すべきでない接続オプションを指定できないようにするのが目的です。
※ TypeScriptの仕様などを把握したいので、ドキュメントなども合わせて示していただけると大変助かります。
発生している問題・エラー
型が異なる箇所でエラーになって欲しいが、エラーにならない。
TypeScript: 3.7.5
interface Base {
a: string,
b: string,
}
interface Hoge extends Base {}
interface Fuga extends Base {}
function getHoge(): Hoge {
return {
a: 'a',
b: 'b',
};
}
const hoge: Hoge = getHoge();
console.log(hoge);
const fuga: Fuga = getHoge(); // エラーになって欲しい
console.log(fuga);
自分で試したこと
単純なJavaScriptオブジェクトだけを使用している場合(構造型を使用する場合)、 instanceofまたはtypeofにアクセスすることさえできません。
これは「オブジェクトがどのInterfaceを実装しているのかは判定できない」と解釈できそう。
プロパティを追加することで特定の型に制限できるようにはなったが、本来不要なプロパティが増えてしまった。
TypeScriptでは妥当な解決方法だろうか?
interface Base {
a: string,
b: string
}
interface Hoge extends Base {
type: 'Hoge',
}
interface Fuga extends Base {
type: 'Fuga',
}
よろしくお願いいたします。