前提・実現したいこと
typescriptでオブジェクトをインスタンス化した際に動的に型付けを行いたい。
下記のコードで、obj1をインスタンス化する際に、型を{a:'01';b:'02'}となるように型定義を行いたいのですが、
どうしても、{a:string,b:string}と言った形になってしまいます。
ジェネリクスを用いて、obj1をインスタンス化の際に動的に型付けを行う方法を教えていただきたいです。
よろしくお願いします。
該当のソースコード
typescript
1type Obj01 = { 2 a: string; 3 b: string; 4}; 5type K = keyof { a: string; b: string }; 6 7class ObjectWrapper<T extends Obj01> { 8 private _obj: T; 9 10 /*** 11 * 引数のオブジェクトのコピーを this._objに設定 12 */ 13 constructor(_obj: T) { 14 this._obj = { ..._obj }; 15 } 16 17 /** 18 * this._objのコピーを返却 19 * @return Object 20 */ 21 get obj() { 22 return { ...this._obj }; 23 } 24 25 /** 26 * this._obj[key] に valを設定。keyがthis._objに存在しない場合、falseを返却 27 * @param key オブジェクトのキー 28 * @param val オブジェクトの値 29 */ 30 set(key: K, val: string): boolean { 31 if (this._obj[key] !== undefined) { 32 console.log(typeof this._obj) 33 console.log(typeof key) 34 this._obj[key] = val; 35 return true; 36 } 37 return false; 38 } 39} 40 41const obj1 = { a: '01', b: '02' }; 42const wrappedObj1 = new ObjectWrapper(obj1); 43 44if (wrappedObj1.obj.a === '01') { 45 console.log('OK: get obj()'); 46} else { 47 console.error('NG: get obj()'); 48} 49 50if ( 51 wrappedObj1.set('c', '03') === false && 52 wrappedObj1.set('b', '04') === true && 53 wrappedObj1.obj.b === '04' 54) { 55 console.log('OK: set(key, val)'); 56} else { 57 console.error('NG: set(key, val)'); 58} 59
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/10/06 05:29
退会済みユーザー
2021/10/06 10:07