.net 为什么我需要打字脚本?

.net 为什么我需要打字脚本?,.net,typescript,methods,return-type,any,.net,Typescript,Methods,Return Type,Any,我们有一个简单的typescript方法 function identity(arg) { return arg; } 这个方法给出一个参数并返回它,它可以通过任何类型(int、string、bool等)工作。 我们还可以用另一种方式声明此方法: function identity(arg:any):any { return arg; } 这个方法给出一个参数并返回它,它可以通过任何类型(int、string、bool等)工作 这两种方式的区别是什么?换句话

我们有一个简单的typescript方法

function identity(arg) {
    return arg;
}
这个方法给出一个参数并返回它,它可以通过任何类型(int、string、bool等)工作。 我们还可以用另一种方式声明此方法:

 function identity(arg:any):any {
        return arg;
    }
这个方法给出一个参数并返回它,它可以通过任何类型(int、string、bool等)工作


这两种方式的区别是什么?换句话说,使用
any
类型的好处是什么?

any
类似于一种匿名类型,而不像
对象。使用
any
时,编译器会执行最小的类型检查,因为它不知道变量的成员

例如:

var var1: any;
var var2: Object;

var1.whatever(); // The compiler trusts you
var2.whatever(); // Compiler throws an error
正如您在示例中所看到的,您可以随心所欲地处理
var1
,但除了它的官方成员之外,您不能处理
var2


在函数中,可以使用
arg
执行任何操作,但如果为其指定类型,则必须使用该类型的成员。

在您的特定情况下,这并不重要但是

  • 如果您启用了strict标志(或者扩展为noImplicitAny标志),它将为第一个而不是第二个抛出错误。因为不允许使用隐式any
  • 它们相同的原因是因为TypeScript无法推断参数的类型或返回类型,所以它们都被推断为任意类型
Any是TypeScript的转义图案填充,它意味着“我不知道这是什么类型,所以我对它所做的任何事情都是可以接受的,它上的任何属性都隐式存在(并且也有一个Any类型),我可以用任何参数调用它,我还可以
new


建议您尽量减少使用
任何
s,无论是隐式的还是显式的,因为这样您就失去了TypeScript提供的一些好处。

类型系统是结构化的,因此匿名性的概念并不真正适用。另外,使用另一种类型被认为是不好的做法。请使用
{}
请注意粗体。即使对象可能是不好的做法,但在试图解释某些东西时,它是最简单的东西。这仍然令人困惑。我认为您指的是动态类型,它非常令人困惑,但也没有那么不正确