参数“X”在 TypeScript 中隐式具有“任何”类型

参数 ‘X’ 在 TypeScript 中隐式具有 ‘any’ 类型

Parameter ‘X’ implicitly has an ‘any’ type in TypeScript

当函数的参数具有隐式类型any.

要解决该错误,请将参数的类型显式设置为any,使用更具体的类型或设置noImplicitAnyfalsein tsconfig.json

下面是错误如何发生的示例。

索引.ts
// ⛔️ Error: Parameter 'a' implicitly has an 'any' type.ts(7006) function sum(a, b) { return a + b; }

函数的参数sum没有显式类型化,因此 TypeScript 将它们设置为隐式类型any.

显式设置参数的类型any

解决该错误的一种方法是将参数的类型显式设置为
any.

索引.ts
function sum(a: any, b: any) { return a + b; } console.log(sum(10, 50)); // 👉️ 60
我们显式键入ab参数以具有any. 该类型不再隐式设置,因此我们不会收到错误。

同样的方法可以用于箭头函数、回调等。

索引.ts
const sum = (a: any, b: any) => { return a + b; }; console.log(sum(10, 50)); // 👉️ 60

下面是一个将回调函数的参数设置为any.

索引.ts
const arr = ['bobby', 'hadz', 'com']; arr.forEach((item: any) => { console.log(item); });

在这种特殊情况下,这不是必需的,因为 TypeScript 有时能够推断出变量的类型。

但是,如果arr变量隐式类型为 any,则其项也将具有隐式类型,any这会导致错误。

您可能还必须关闭事件处理函数的类型检查,例如在 Angular 中。

索引.ts
function handleClick(event: any) { console.log(event); }

相应地键入函数的参数

更好的解决方案是在设置参数类型时更加具体。

索引.ts
function sum(a: number, b: number) { return a + b; } console.log(sum(10, 50)); // 👉️ 60

现在函数中的参数sum被显式类型化为numbers.

这要好得多,因为该any类型有效地关闭了 TypeScript 中的类型检查。

如果您需要声明一个参数数量可变的函数,请点击
下面的文章

抑制整个项目的错误

如果您不喜欢此行为并希望在值隐式键入为 时抑制错误any,请
tsconfig.json
noImplicitAny文件中将选项设置为false

tsconfig.json文件
{ "compilerOptions": { // ... other properties "noImplicitAny": false } }

If the strict property is set to true, the noImplicitAny option defaults
to true.

When TypeScript can’t find type annotations for a value and they can’t be
inferred, it falls back to a type of any.

When you set noImplicitAny to true, TypeScript issues an error every time it can’t find or infer type annotations for a value.

By turning it off, you suppress the error messages. However, the more strictly
you write your TypeScript code, the less likely you are to get unexpected
runtime errors.

You can also use a comment to disable
type checking.

# Additional Resources

You can learn more about the related topics by checking out the following
tutorials: