TypeScriptインターフェイスとして定義された非常に大きなオブジェクトがあるとします。
interface AccountInterface {
accountIdentifier?: string;
sid?: string;
idToken?: {
aio?: string;
};
idTokenClaims?: {
aio?: string;
};
}
オブジェクトには常にそのプロパティとサブプロパティを持たせたいです。それらは、文字列または空の文字列のいずれかです。
let account = {
accountIdentifier: "",
sid: "",
idToken: {
aio: "",
},
idTokenClaims: {
aio: "",
},
};
私がこれを行うことが可能であっただろうと私が思った他の質問を読んで:
const emptyAccount = {} as AccountInterface
console.log('emptyAccount ', emptyAccount)
console.log('emptyAccount.sid ', emptyAccount.sid)
ただし、これでは、必要に応じてすべてのプロパティが空の文字列であるオブジェクトが作成されるわけではありません。
このようなことが可能であれば素晴らしいので、インターフェイス用と空の文字列プロパティを持つオブジェクト用のように、コード内でオブジェクトを複製する必要はありません。
class
それを実装interface
するを作成し、デフォルト値を追加し、それを使用してオブジェクトを作成できます。同じ構造を他の場所でまだ書き直していますが、これは1回だけ行う必要があり、必要にconstructor
応じて、を使用してオブジェクトを異なる値で初期化できます。
interface AccountInterface {
accountIdentifier?: string;
sid?: string;
idToken?: {
aio?: string;
};
idTokenClaims?: {
aio?: string;
};
}
class Account implements AccountInterface {
accountIdentifier = '';
sid = '';
idToken = { aio: '' };
idTokenClaims = { aio: '' };
}
const emptyAccount = new Account();
また、@ apokryfosで指摘されているように、クラスを使用してオブジェクトを入力することもできるため、クラスを使用して作成されていないインスタンスを実装するオブジェクトを作成instance
するclass
場合を除いて、との両方を定義する必要はありません(それらには、クラスで定義されたメソッドがありません)。
のclass
使用を避け、afunction
を使用して同様のことを行う場合は、次のことができます。
function createAccount(): AccountInterface {
return {
accountIdentifier = '';
sid = '';
idToken = { aio: '' };
idTokenClaims = { aio: '' };
};
}
const emptyAccount = createAccount();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加