MeWrite Docs

TS7006: Parameter 'x' implicitly has an 'any' type

TypeScriptで型定義がなく暗黙的にany型と推論された場合のエラー

概要

TypeScriptのstrictモードまたはnoImplicitAnyが有効な場合に、引数や変数に型注釈がなく、コンパイラが型を推論できない場合に発生するエラーです。

エラーメッセージ

TS7006: Parameter 'x' implicitly has an 'any' type.
TS7005: Variable 'x' implicitly has an 'any' type.

原因

  1. 関数の引数に型注釈がない: 引数の型が推論できない
  2. 変数の初期値がない: 宣言時に値が代入されず型が決まらない
  3. コールバック関数の引数: 配列メソッドなどのコールバックで型が推論されない
  4. strictモードの有効化: プロジェクト設定でnoImplicitAnyが有効

解決策

1. 関数の引数に型注釈を追加

1
2
3
4
5
6
7
8
9
// Bad
function greet(name) { // TS7006
  return `Hello, ${name}`;
}

// Good
function greet(name: string): string {
  return `Hello, ${name}`;
}

2. 変数に型注釈または初期値

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// Bad
let value; // TS7005
value = 'hello';

// Good: 型注釈
let value: string;
value = 'hello';

// Good: 初期値から推論
let value = 'hello'; // string型と推論される

3. コールバック関数の型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const numbers = [1, 2, 3];

// Bad
numbers.forEach(function(num) { // TS7006
  console.log(num);
});

// Good: 型注釈
numbers.forEach(function(num: number) {
  console.log(num);
});

// Good: アロー関数(配列の型から推論される)
numbers.forEach((num) => {
  console.log(num); // numはnumber型
});

4. イベントハンドラの型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Bad
document.addEventListener('click', function(event) { // TS7006
  console.log(event.target);
});

// Good
document.addEventListener('click', function(event: MouseEvent) {
  console.log(event.target);
});

// Good: アロー関数
document.addEventListener('click', (event) => {
  console.log(event.target); // eventはMouseEvent型
});

5. Object.keysの型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const obj = { a: 1, b: 2, c: 3 };

// Bad
Object.keys(obj).forEach((key) => {
  console.log(obj[key]); // TS7053
});

// Good: 型アサーション
(Object.keys(obj) as Array<keyof typeof obj>).forEach((key) => {
  console.log(obj[key]);
});

// Good: for...in
for (const key in obj) {
  if (Object.hasOwn(obj, key)) {
    console.log(obj[key as keyof typeof obj]);
  }
}

6. 明示的にanyを許可(非推奨)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 一時的な対処(非推奨)
function process(data: any) {
  // any型を許可
}

// Better: unknown型を使用
function process(data: unknown) {
  if (typeof data === 'string') {
    console.log(data.toUpperCase());
  }
}

7. tsconfig.jsonの設定

1
2
3
4
5
6
{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true
  }
}

よくある間違い

  • any型で逃げて型安全性を失う
  • ライブラリの型定義ファイル(@types/xxx)をインストールし忘れる
  • JSON.parse()の戻り値に型を付けない

関連エラー

参考リンク

TypeScript の他のエラー

最終更新: 2025-12-13