すべての文字列であっても、クラスオブジェクトに一意のIDタイプを与えたい。 type
を試してみました。ユニークなサブクラス名を持つ基本クラスから派生させてみました。TypeScriptの基本タイプからユニークなタイプを作成しますか?
次の例を参照してください。 type
でもextends
でも、コンパイラにこれらを一意の型として扱うよう指示することはできません。私はAnimalIdとその逆を期待する関数にHumanIdを引き渡すことができます。
私はオブジェクトに互換性があり、JavaScriptの観点から見ると、これは完全に意味があると思います。私はAnimalIdに一意のメンバーを追加する場合、実際には、私が期待してエラーを取得する:
Argument of type 'HumanId' is not assignable to parameter of type 'AnimalId'.
は、基本的なタイプのためのユニークなタイプの別名を作るために活字体との良好なアプローチはありますか?
// type HumanId = string;
// type AnimalId = string;
class id {
constructor(public value: string) { }
toString(): string { return this.value;}
}
class HumanId extends id { };
class AnimalId extends id { };
function humanTest(id: HumanId): void {
}
function animalTest(id: AnimalId): void {
}
let h: HumanId = new HumanId("1");
let a: AnimalId = new AnimalId("2");
animalTest(h);
うん:あなたは2つだけを区別するようにコンパイラにしたい場合は、あなただけの何のランタイムの違いを確認しないダミーのユニークなメンバーを追加することができます
。言語機能が不足していないことを確認していただきありがとうございます。 'type HumanId = unique string'を宣言できるといいと思う。特定の目的のために使用される基本型のコンパイル時間チェックを利用するためのいくつかの方法。 – Nimai
これは価値があると思いますが、私は可能な限り簡単な一行の構文を使いました。 'class HumanId extends BaseId {humanId}' – Nimai
あなたが望むのは型チェックであれば、おそらくHumanIdとAnimalIdを型として導入することができます.d.ts宣言ファイル? – Kokodoko