我是TypeScript的初学者。我对"any"类型的使用存在疑惑。
如果我没错的话,使用"any"基本上是选择退出类型检查。例如:
var num:any = 12
var num = 12
我们可能可以直接使用第二种方法,那么使用"any"有什么必要呢?
我是TypeScript的初学者。我对"any"类型的使用存在疑惑。
如果我没错的话,使用"any"基本上是选择退出类型检查。例如:
var num:any = 12
var num = 12
我们可能可以直接使用第二种方法,那么使用"any"有什么必要呢?
虽然这两者在使用上是等效的(因为未指定类型时any
是默认类型),但通过显式指定类型为any
,您可以明确声明意图。
如果可用,Intellisense将显示类型为any
,从而更容易理解变量的预期用途。
number
;证明。 - T.J. Crowderlet notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
更多信息: TypeScript中的类型
没错。
For example
var num:any = 12 var num = 12
we could probably use the second one itself...
当您不提供类型注释但提供初始化程序(= 12
)时,TypeScript将根据初始化表达式的结果类型推断变量的类型。例如,在您的示例中,它将推断number
:Playground example
如果您想要能够稍后将num
设置为其他内容(例如字符串),则可以使用any
,如下所示 - 但请继续阅读,我不会这样做(playground):
let num: any = 12;
console.log(num);
num = "twelve";
console.log(num);
如果您没有注释类型 (: any
),这将导致错误,因为 num
的类型被推断为 number
(playground):
let num = 12;
console.log(num);
num = "twelve";
//^−−−− Type 'string' is not assignable to type 'number'.(2322)
console.log(num);
any
选择了退出类型检查,因此尽可能避免使用它。在该示例中,如果我有一个非常好的理由允许变量是数字或字符串,最好给它一个联合类型 string | number
(并且很可能要更改它的名称; playground):let x: string | number = 12;
console.log(x);
x = "twelve";
console.log(x);
这样,如果我尝试分配一个boolean
(例如),我会得到一个错误。
'any'的需求是什么?
any
的目的,正如你所说,是为了在该变量上选择退出类型检查。这是the any
documentation中的解释:
当你不想写出一个长长的类型来说服TypeScript某一行代码是可以的时,
any
类型非常有用。
但由于TypeScript的整个目标是提供静态类型检查,而any
则选择退出了静态类型检查,因此通常情况下最好避免使用any
。虽然并不总是可能(特别是在与项目范围之外的无类型代码进行接口交互时),但在可能的情况下,通常是最好的选择。
任意类型:当无法确定类型时使用。当您将类型声明为任意类型时,可以在该变量中重新分配任何类型的值。
var num:any = 12;
num = boolean;
num = "abcd"
any
可以像你说的那样退出类型检查。你提出的第二个描述(没有 any
)也能编译通过。但是,如果你使用类似 tslint 的 linting 工具,它就是无效(*)的。
(*) 通过“无效”我指的是你所使用的 IDE 将弹出一个警告。但归根结底; any valid Javascript code is also valid for Typescript,因为它们可以编译通过。
any
的明确性也很好。它让你知道开发者做出了明智的决定,允许这个变量是动态的。 - Marieany
来表示数字类型。 - baao