kanfutrooper
@kanfutrooper (masaomi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

★マークの所に、any以外の何の型を入力したら良いか教えてほしい。

Q&A

Closed

解決したいこと

TypeScriptのclass文法を勉強しています。
★マークの所に、any以外の何の型を入力したら良いか教えてほしいです。
何方かアドバイスをお願いします

Vscodeで、赤い下波線にクリックすると下記が表示されます。

メンバー '_obj' の型は暗黙的に 'any' になります。ts(7008)

anyを入力したら、エラー表示はなくなるのですが、
『any型はTypeScriptを使う上で、基本的に定義してはいけません。理由としてですが、any = なんでも良いということはTypeScriptを使用する意味がなく、JavaScriptを使っているのと同じになってしまいます。』と参考サイトに書いてあるので、
『string』を入力してみたのですが、他のエラー表示が出ます。
『string』以外で定義がありましたら、教えてください。

TypeScript.ts
/***this._objがインスタンス化した引数のオブジェクト型になるようにprivate _objに型を割り当てる*/

class ObjectWrapper {
  private _obj:; 
// エラー文 メンバー '_obj' の型は暗黙的に 'any' になります。ts(7008)

  /***
   * 引数のオブジェクトのコピーを 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) {
      this._obj[key](val);
      return true;
    }
    return false;
  }

  /**
   * 指定したキーの値のコピーを返却
   * 指定のキーが存在しない場合 undefinedを返却
   * @param key オブジェクトのキー
   */
  //変更前get(key) {}
  get(key: string) {
    return this._obj;
  }

  /**
   * 指定した値を持つkeyの配列を返却。該当のものがなければ空の配列を返却。
   */
  //findKeys(val: unknown) {}
  findKeys(val: unknown): string[] {
    return this._obj(val);
  }
}
const objecting = new ObjectWrapper('Objecting');
/**
 * 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)');
}
0

1Answer

前回の質問への回答を見れば,前回とまるで同じことを聞いていることも含めてご理解いただけると思うのですが…

まずはTypeScriptのオブジェクトや型定義について勉強してみてください.
初学者向けの日本語の資料としてサバイバルTypeScriptを読めば大概のことは書いてあります.
https://typescriptbook.jp/reference/values-types-variables/object/non-primitives-are-objects

0Like

Comments

  1. @kanfutrooper

    Questioner

    @Vercleneさん、回答ありがとうございます!
    まずは、教えて頂いたサバイバルTypeScriptを読みます!

Your answer might help someone💌