4
新しいフィールドを追加することによって、TypeScriptでデータオブジェクトを拡張しようとしています。私はそれがJavaScriptでかなり一般的なパターンだと思いますが、bar
を以下のようにスニペットでオプションにせずに、コンパイルできるようにすることはできません。TypeScriptでデータオブジェクトを拡張する
bar
をオプションにしないようにする方法はありますか? ご迷惑をおかけして申し訳ございません。ありがとうございます。キャストのこのタイプは、正式type assertionと呼ばれる
interface ExtendedDataObject extends BaseDataObject {
bar: string;
}
function extendData(input : BaseDataObject) : ExtendedDataObject {
var output = input as ExtendedDataObject;
output.bar = input.foo + ' some suffix';
return output;
}
、それはあなたを信頼するようにコンパイラに指示します:
interface BaseDataObject {
foo: string;
}
interface ExtendedDataObject extends BaseDataObject {
bar?: string;
}
function extendData(input : BaseDataObject) : ExtendedDataObject {
var output : ExtendedDataObject = input;
output.bar = input.foo + ' some suffix';
return output;
}
これを回避するにはこれが唯一の方法だと思われます。 – choz
それは、ありがとう、働く。そして、欠落しているフィールドのコンパイル時チェックがバイパスされていると思います。 – Haocheng
@Haochengこれは正式に[タイプアサーション](https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html)と呼ばれ、コンパイラに、オブジェクトあなたが指定したタイプとして扱うことができます。 – JohnnyHK