TypeScriptのエラーを解消したい
Q&A
Closed
解決したいこと
TypeScriptのclass文法を勉強しています。
下記4ヶ所にエラーの表示が出ます。
調べてエラーが改善しません。
何方か改善方法を教えてください。
発生しているエラー
① Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Object'.
No index signature with a parameter of type 'string' was found on type 'Object'.
② Property 'a' does not exist on type 'Object'.
③ Property 'b' does not exist on type 'Object'.
class ObjectWrapper {
private _obj;
/***
* 引数のオブジェクトのコピーを this._objに設定
*/
//変更前 constructor(_obj: Object) {}
constructor(_obj: Object) {
this._obj = _obj;
}
/**
* this._objのコピーを返却
* @return Object
*/
//変更前 get obj() {}
get obj() {
return this._obj;
}
/**
* this._obj[key] に valを設定。keyがthis._objに存在しない場合、falseを返却
* @param key オブジェクトのキー
* @param val オブジェクトの値
*/
//変更前set(key, val): boolean {}
set(key: string, val: string): boolean {
if (this._obj[key] !== undefined) { // ① のエラーが表示
console.log(typeof this._obj);
console.log(typeof key);
this._obj[key] = val; // ① のエラーが表示
return true;
}
return false;
}
/**
* 指定したキーの値のコピーを返却
* 指定のキーが存在しない場合 undefinedを返却
* @param key オブジェクトのキー
*/
//変更前get(key) {}
get(key: string) {
return this._obj[key];
}
/**
* 指定した値を持つkeyの配列を返却。該当のものがなければ空の配列を返却。
*/
//findKeys(val: unknown) {}
findKeys(val: unknown): unknown[] {
return keys;
}
}
/**
* check script
* 完成したら、以下のスクリプトがすべてOKになる。
*/
const obj1 = { a: '01', b: '02' };
const wrappedObj1 = new ObjectWrapper(obj1);
if (wrappedObj1.obj.a === '01') { // ② のエラーが表示
console.log('OK: get obj()');
} else {
console.error('NG: get obj()');
}
if (
wrappedObj1.set('c', '03') === false &&
wrappedObj1.set('b', '04') === true &&
wrappedObj1.obj.b === '04' // ③ のエラーが表示
) {
console.log('OK: set(key, val)');
} else {
console.error('NG: set(key, val)');
}
if (wrappedObj1.get('b') === '04' && wrappedObj1.get('c') === undefined) {
console.log('OK: get(key)');
} else {
console.error('NG: get(key)');
}
const obj2 = { a: '01', b: '02', bb: '02', bbb: '02' };
const wrappedObj2 = new ObjectWrapper(obj2);
const keys = wrappedObj2.findKeys('02');
if (
wrappedObj2.findKeys('03').length === 0 &&
keys.includes('b') &&
keys.includes('bb') &&
keys.includes('bbb') &&
keys.length === 3
) {
console.log('OK: findKeys(val)');
} else {
console.error('NG: findKeys(val)');
}