我正在使用 TypeScript,我是新手,所以我对声明变量有疑问。
当我们声明一个变量时,我们使用let name: type = value
。好的,我总是分配变量的类型:如果我想要一个字符串,我声明为 string
, bool 值和数字也是如此。我看到了 any
类型,它使变量成为任何类型。
问题是:如果我将变量声明为数字,是否需要使用let myNumber: number = 23;
?有必要说类型是数字吗?
如果我不这样做,并执行 typeOf(myNumber)
它返回数字,但对于 TypeScript 是 number
或者是 any
?
最好的做法是在为变量赋值时始终设置类型,否则它不重要吗?
最佳答案
Typescript 将避免创建 any
类型的变量。当您在 tsconfig.json
中将选项 noImplicityAny
设置为 true
时,如果您没有指定类型,它甚至会给您一个错误而 Typescript 只能将类型设置为 any
。
一般来说,当您在示例中的 let
中指定类型时...
let myNumber: number = 23;
...您显式设置了类型。这意味着您清楚地传达了将此变量设为 number
的意图。当你分配一个非数字值时,你会得到一个错误。用显式类型声明所有变量没有错,因为这只会提高代码的清晰度。
另一种选择是隐式键入您的变量。只有在声明时为变量赋值时才能做到这一点:
let myNumber = 23;
由于您为变量分配了一个数字文字,Typescript 可以推断变量的类型并将其视为一个数字。在某些情况下,覆盖推断很有用,例如联合类型:
let myNumberOrText: number | string = 23;
当您将 noImplicitAny
设置为 true
时,禁止对 any
进行隐式键入。所以……
let myAny = { FirstName: "John", LastName: "Doe" };
...将导致错误,因为它会隐式键入 any
。仍然允许显式版本。所以你可以写...
let myAny: any = { FirstName: "John", LastName: "Doe" };
...尽管在 Typescript 中您最好声明一个类或接口(interface)并将其用于键入(假设您已声明类型 Person
):
let myPerson: Person = { FirstName: "John", LastName: "Doe" };
Typescript 的全部意义在于将静态类型引入 JavaScript。如果您使用 any
类型声明您的变量,您将无法从静态类型中获益,您可以只使用纯 JavaScript。
关于javascript - typescript :使用 let (最佳实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281039/