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)');
}