【问题标题】:Why I need any type in typescript?为什么我需要打字稿中的任何类型?
【发布时间】:2017-12-09 19:01:44
【问题描述】:

我们在打字稿中有一个简单的方法

function identity(arg) {
    return arg;
}

此方法提供一个参数并返回它,它适用于任何类型(int、string、bool 等)。 我们也可以用另一种方式声明这个方法:

 function identity(arg:any):any {
        return arg;
    }

此方法提供一个参数并返回它,它适用于任何类型(int、string、bool 等)。

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

【问题讨论】:

    标签: .net typescript methods return-type any


    【解决方案1】:

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

    • 如果您启用了 strict 标志(或者,扩展为 noImplicitAny 标志),它将对第一个引发错误,但不会对第二个引发错误。因为 implicit any 是不允许的。
    • 之所以相同,是因为 TypeScript 无法推断参数的类型或返回类型,所以都推断为 any。

    Any 是你从 TypeScript 中的逃生舱口,它的意思是“我不知道这是什么类型,所以我用它做的任何事情都是可以接受的,它上面的任何属性都隐式存在(并且也有任何类型),我可以带任何参数调用它,我也可以new它。

    建议您尽量减少对 anys 的使用,无论是隐式还是显式,因为那样您会失去 TypeScript 提供的一些好处。

    【讨论】:

      【解决方案2】:

      anylike 匿名类型,不像 Object。使用 any 时,编译器会进行最少的类型检查,因为它不知道变量的成员。

      例子:

      var var1: any;
      var var2: Object;
      
      var1.whatever(); // The compiler trusts you
      var2.whatever(); // Compiler throws an error
      

      正如您在示例中看到的那样,您可以随意处理var1,但您不能乱用var2,除了它的官方成员。

      在你的函数中,你可以使用 arg 来做任何你想做的事情,但是如果你为它指定了一个类型,那么你就必须使用该类型的成员。

      【讨论】:

      • 类型系统是结构化的,所以匿名的概念并不真正适用。另一种类型也被认为是不好的做法。使用{}
      • 注意粗体 like。即使是 Object 也可能是不好的做法,它是尝试解释某事时使用的最简单的东西。
      • 这仍然令人困惑。我认为您的意思是动态类型,它非常令人困惑但又不正确
      猜你喜欢
      • 2016-12-12
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多