我正在使用TypeScript而且我是新用的,所以我有一个关于声明变量的问题。
当我们声明变量时,我们使用let name: type = value
。好吧,我总是分配变量的类型:如果我想要一个字符串我声明为string
,与布尔值和数字相同。我看到了any
类型,它构成了任何类型的变量。
问题是:如果我将变量声明为数字,是否需要使用let myNumber: number = 23;
?有必要说类型是数字吗?
如果我不这样做,并执行typeOf(myNumber)
它会返回数字,但对于TypeScript是number
还是any
?
最佳做法是在为变量赋值时始终设置类型,或者它不重要?
答案 0 :(得分:5)
Typescript将避免生成any
类型的变量。当您在noImplicityAny
中将选项true
设置为tsconfig.json
时,如果您没有指定类型,它甚至会给您一个错误,而Typescript只能将类型设置为{ {1}}。
一般来说,当您在示例中指定any
中的类型时......
let
...您明确设置类型。这意味着您清楚地表达了将此变量设为let myNumber: number = 23;
的意图。分配非数字值时,您将收到错误。使用显式类型声明所有变量没有任何问题,因为这只会提高代码的清晰度。
另一种选择是隐式输入变量 。只有在声明时为变量赋值时才能执行此操作:
number
由于您为变量指定了数字文字,因此Typescript可以推断变量的类型,并将其视为数字。在某些情况下,覆盖推理是有用的,例如对于联合类型:
let myNumber = 23;
当let myNumberOrText: number | string = 23;
设置为noImplicitAny
时,true
的隐式输入被禁止。所以......
any
...会导致错误,因为它会隐式输入let myAny = { FirstName: "John", LastName: "Doe" };
。仍然允许显式版本。所以你可以写......
any
...虽然在Typescript中你最好声明一个类或接口并用它来输入(假设你声明了一个类型let myAny: any = { FirstName: "John", LastName: "Doe" };
):
Person
Typescript的重点是向JavaScript引入静态类型。如果您使用类型let myPerson: Person = { FirstName: "John", LastName: "Doe" };
声明变量,那么静态类型将无法获得优势,您只需使用纯JavaScript即可。