我开始学习Typescript。 我想知道如果每个变量都是“任意”类型,那么为什么我们需要any
类型,我认为如果不指定类型。
例如,这些代码的输出将始终为“是”,无论x和y的值为何:
var x = "d";
var y: any = 5 ;
alert(y);
y = x ;
alert(y);
if (x===y)
alert("yes");
else
alert("no");
我开始学习Typescript。 我想知道如果每个变量都是“任意”类型,那么为什么我们需要any
类型,我认为如果不指定类型。
例如,这些代码的输出将始终为“是”,无论x和y的值为何:
var x = "d";
var y: any = 5 ;
alert(y);
y = x ;
alert(y);
if (x===y)
alert("yes");
else
alert("no");
any
- 在许多情况下,TypeScript会推断出一种类型,然后强制执行该类型。例如,let x = 2;
会将x
推断为具有number
类型 —— 然后稍后使用x = "cat";
将创建一个错误。在这种情况下,如果您需要,必须使用any
。any
,而不能只是“省略它”,例如,对于泛型类型:type Pair<A, B> = [A, B];
declare function needsSomethingPairedWithString(value: Pair<any, string>): void;
needsSomethingPairedWithString
函数,我们不关心第一对元素是什么 - 也许我们会测试它的类型,也许我们甚至不会使用它,但重点是我们不关心。但是我们想指定Pair
的第二个元素是string
。因此,我们需要编写Pair<any, string>
来表示。unknown
比any
更可取 - unknown
的含义更接近于“不知道也不关心”,而不是any
。然而,在处理约束时,any
可能是正确的类型。--noImplicitAny
编译器标志的存在:这将导致any
被推断为类型的情况变成错误。这迫使您修复事物,使它们被正确地推断,注释正确的类型,或者至少显式注释any
类型。这对于从一开始就使用TypeScript的项目来说是强烈建议的 - 隐式any
应该保留用于逐渐将JavaScript转换为TypeScript的项目,因为它是许多错误的潜在来源。使用--noImplicitAny
强制您明确指定any
,这意味着任何以后阅读它的开发人员都会立即注意到any
正在被使用。这很重要,因为any
意味着事物不会像您希望的那样安全。--noImplicitAny
运行TypeScript,则在大多数情况下,TypeScript将不再假定变量应该具有类型any
,例如。function foo(x) {
// x is of type any
}
--noImplicitAny
模式下会产生错误。因此,如果在这种特定情况下您希望 x
是 any
,您必须明确请求它:function foo(x: any) {
// x is of type any
}
--noImplicitAny
可能会帮助他们澄清这一点。 - Ruan Mendes
any
类型允许您在代码中的某些部分放弃类型检查,这些部分难以使其类型安全。 最好只在必要时才使用它。 我几乎可以确定有一个经典的Stack Overflow问题/答案与此相关;正在搜索... - jcalzx = y;
编译器应该会警告您正在尝试将数字分配给字符串(或将某些内容分配给字符串)。 - Heretic Monkeyany
。 - BergiNaN
:-P - Bergi