打字稿:使用let(最佳实践)

时间:2016-12-22 10:32:48

标签: javascript typescript

我正在使用TypeScript而且我是新用的,所以我有一个关于声明变量的问题。

当我们声明变量时,我们使用let name: type = value。好吧,我总是分配变量的类型:如果我想要一个字符串我声明为string,与布尔值和数字相同。我看到了any类型,它构成了任何类型的变量。

问题是:如果我将变量声明为数字,是否需要使用let myNumber: number = 23;?有必要说类型是数字吗?

如果我不这样做,并执行typeOf(myNumber)它会返回数字,但对于TypeScript是number还是any

最佳做法是在为变量赋值时始终设置类型,或者它不重要?

1 个答案:

答案 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即可。