TypeScript noImplicitAny介绍
TypeScript 是由微软公司开发的面向对象、强类型和编译语言。它是 JavaScript 的超集,也就是说,每个有效的 JavaScript 代码实际上都是有效的 TypeScript 代码(这意味着 JavaScript 是带有一些附加功能的 TypeScript)。TypeScript 是建立在 JavaScript 之上的。我们可以编写 TypeScript 代码并使用 TypeScript 编译器将其编译为 JavaScript。将一个有效的 JavaScript 代码库迁移到 TypeScript 并不难,因为符合语法要求的 JavaScript 代码本质上就是 TypeScript 代码。
在理解 noImplicitAny(不隐式 any)之前,我们需要了解 TypeScript 中的 Any 数据类型。
什么是 any 类型?
当我们实际上不知道会返回什么类型时,应该使用 any 类型。例如,当我们使用任何返回没有类型定义的参数的函数时,这在纯 JavaScript 中也是适用的。any 类型是 TypeScript 中的特殊类型,我们可以在希望有效地关闭 TypeScript 类型检查时使用它。我们经常需要这样做,因为有时候我们需要忽略 TypeScript 给出的类型错误。它是 TypeScript 中所有内置和用户定义类型的超集。
如果我们有一个 let 语句(let 语句允许我们重新分配值,而 const 不允许),和变量标识符 text,并且没有为它添加类型:
let test;
在这里,让测试转换成让测试:在我们的IDE中的任何地方,因此TypeScript实际上是在给我们推断类型,而不是声明它。然而,即使我们将一个字符串赋给变量测试,它确实是完全正确的,但是我们的IDE仍然会将其显示为任何类型。因此,TypeScript不能改变具有< strong >任何< /strong >类型的变量的数据类型,它被设置为默认值。
let test;
test = "GeeksForGeeks";
什么是noImplicitAny?
noImplicitAny是我们可以在TypeScript中修改的编译器配置或编译选项。此配置的主要功能是将TypeScript从可选类型转换为严格类型的语言。如果我们没有指定类型,并且TypeScript无法自动推断类型,编译器将默认为any类型。在某些情况下,这可能是一个严重的问题,因为将任何类型赋给变量会告诉编译器“不要对此进行类型检查”。
noImplicitAny编译选项的存在将导致为类型推断为any的情况变为错误。这将强制我们以一种可以正确推断类型或至少明确声明类型为any的方式来修复问题。
示例:
HTML
<!DOCTYPE html>
<html>
<body>
<pre>
Here we haven't explicitly declared the variable.
So a error will be returned.
</pre>
<script type="text/javascript">
function printMe(g) {
console.log(g);
}
printMe(g);
</script>
</body>
</html>
当我们在编译器选项中配置了 noImplicitAny 时,上述代码会抛出一个错误,因为我们没有显式声明变量 g 。
输出:

示例:
HTML
<!DOCTYPE html>
<html>
<body>
<pre>
Here we have explicitly declared the variable.
So no error will be returned.
</pre>
<script type="text/javascript">
let g;
function printMe(g) {
console.log(g);
}
printMe(g);
</script>
</body>
</html>
这里我们明确声明了变量 g, 所以不会返回错误。
输出:

如何使用noImplicitAny?
要将noImplicitAny作为编译器选项使用,我们需要配置tsconfig.json中的compilerOptions。我们需要将noImplicitAny设置为true。因此,通过将noImplicitAny设置为true,我们将确保永远不会让编译器通过推断为任何类型来错误地跳过类型检查。完成此操作后。
{
"compilerOptions": {
"noImplicitAny": true
}
}
将noImplicitAny选项在编译器选项中启用的另一种方法是通过使用 strict 选项。对于任何开发人员来说,使用 noImplicitAny 是一个好的实践,当从JavaScript迁移到TypeScript代码库时,没有人希望在每个地方都添加数据类型。因此,在使用noImplicitAny之后,我们必须在第一次编写脚本时显式添加类型,以免日后变得麻烦。
{
"compilerOptions": {
"strict": true
}
}
极客教程