Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我们需要打字脚本中的任何类型?_Javascript_Typescript - Fatal编程技术网

Javascript 为什么我们需要打字脚本中的任何类型?

Javascript 为什么我们需要打字脚本中的任何类型?,javascript,typescript,Javascript,Typescript,我开始学打字了。 我想知道为什么我们需要any类型如果每个变量都是一种“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”,我假设您不指定类型 这是正确的,但是如果您使用标志--noImplicitAny运行Type

我开始学打字了。 我想知道为什么我们需要
any
类型如果每个变量都是一种“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”,我假设您不指定类型

这是正确的,但是如果您使用标志
--noImplicitAny
运行TypeScript,那么TypeScript将不再假设变量在大多数情况下应该具有类型
any
,例如

function foo(x) {
    // x is of type any
}
上述操作将在
--noImplicitAny
模式下生成错误。因此,如果在这种特定情况下,您希望
x
成为
any
,则必须明确请求:

function foo(x: any) {
    // x is of type any
}

any
类型是一个转义图案填充,它允许您有效地关闭Typescript的类型检查。有时候,没有一个好的方法告诉Typescript你在做什么,所以你用
any
来解决这个问题

并且类型不一定是任何类型。在许多情况下,当您取消类型注释时,Typescript将推断出一个类型,然后强制执行该类型<代码>设x=2将推断
x
具有类型
number
-并使用
x=“cat”稍后将创建一个错误。在这种情况下,如果需要,必须使用
any

在其他情况下,您必须显式地使用
any
,而不能仅“省略”,例如,对于泛型类型:

type Pair<A, B> = [A, B];

declare function needsSomethingPairedWithString(value: Pair<any, string>): void;
类型对=[A,B];
声明函数needsMethingPairedWithString(值:Pair):void;
对于这个
需要methingpairedwithstring
函数,我们不关心该对的第一个元素是什么,也许我们会测试它的类型,也许我们甚至不会使用它,不管怎样,但关键是我们不关心。但是我们想指定
对的第二个元素是
字符串。因此,我们需要编写
Pair
来表示这一点

在许多情况下,最好使用
unknown
any
来实现这些目的-
unknown
的含义比
any
更接近“不知道也不在乎”。但是,特别是在处理约束时,
any
可以是正确的类型


最后,请注意
--noImplicitAny
编译器标志的存在:这将导致
任何类型的
被推断为错误的情况。这迫使您要么修复问题以便正确推断,要么注释正确的类型,或者至少显式注释
any
类型。对于从一开始就使用Typescript隐式
的项目,这是强烈建议的,任何
都应该保留给逐渐将Javascript转换为Typescript的项目,因为它是许多bug的潜在来源。使用
--noImplicitAny
会强制您明确说明
任何
,这意味着以后阅读它的任何开发人员都会立即意识到正在使用
任何
。这一点很重要,因为
any
意味着事情不会像您希望的那样安全。

请参阅。
any
类型允许您选择不进行类型检查,以检查代码中无法轻松实现类型安全的部分。如果有的话,最好少用。我几乎可以肯定,对于这个问题,有一个规范的堆栈溢出问题/答案;搜索…尝试将其更改为
x=y编译器应该警告您,您正在尝试将数字分配给字符串(或某个字符串)。“如果每个变量都是某种“any”-您已经回答了自己的问题
any
正是我们需要的变量类型,如果它需要保存任何值。“例如,对于x和y的任何值,这些代码输出都将始终是yes”是的,因为它们具有相同的值。你为什么不期望他们平等呢?作为记录,当您的代码被传输到JavaScript时,所有类型信息都会丢失——它不知道“any”是什么。类型信息只是为了让您作为开发人员更方便。“对于x和y的任何值,这些代码输出都是肯定的”-除了
NaN
:-PI在评论中提到了类似的内容,不确定这是否是OP所问的。但OP似乎确实误解了推断的类型,而理解
——不夸张
可能有助于他们澄清。