typescriptは構造型の型付けメカニズムを持っています。構造体が同じであれば、Typescriptの読み込み専用型のクラスは通常の型付きのクラスと衝突しません
と、次のように定義された1:あなたはReadonlyCountry
タイプのオブジェクトを返す場合
class ReadonlyCountry {
readonly id: string;
readonly name: string;
}
タイピングシステムは、衝突を示すだろうことを、私はあなたがこのようなクラスを持っている場合ということが期待されます戻り値の型がCountry
の関数で宣言します。これは、以下に示すtypescript playgroundの例のようなケースではないようです。
class Country {
id: string;
name: string;
}
class ReadonlyCountry {
readonly id: string;
readonly name: string;
}
function select(value: string): ReadonlyCountry[] {
let country = new Country();
country.id = "1";
country.name = "name";
return [country];
}
function select2(value: string): Country[] {
// the type of the return here will be ReadonlyCountry[]
// the type of the function return here is Country[]
// why doesn't this collide?
return select(value);
}
だから私の質問は、私は型エラーを表示し、読み取り専用のプロパティと読み取り専用の型を持っていないタイプを持っているタイプと、どれが構造的に同じであることを確認することができる方法であり、混合時? ここで何か愚かなことがありませんか?
ご協力いただければ幸いです。
私はReadonlyマップタイプについて知っており、それを使用しようとしています。 これは私にとっては問題になります。私はReduxを使用しており、私の店から来る状態を読み取り専用にしたいと考えています。これは、直感的なプロパティ(私の店に入る物)と、まるで変わった物(私の店から出てくるもの)を使わずに同じように見えるオブジェクトを持つことを意味します。しかし、私はそれが不可能であることを恐れています.... – KwintenP
私はあなたがReadonlyと一緒に行くべきだと思います - あなたが望むならば - 実行時に店頭からそれらを受け取った直後に凍結することによってもreadonlyを保証します(http://www.2ality .com/2013/08/protection-objects.html)。 – Amid
どこにでも定義すればReadonlyで私の問題を解決します。しかし、誰かがそれを正しく定義することを忘れた場合、私はタイプスクリプトがそれを拾いたいと思います。それが(私の例では上記のように)それをしなければ、私は開発者がどこかでそれを上回るだろうと確信しています。 私はすでにいくつかのフリーズライブラリーを使ってランタイムチェックをしていますが、私はコンパイル時にそれを持っていたいと思います。 – KwintenP