【问题标题】:Typescript: using let (best practice)打字稿:使用 let(最佳实践)
【发布时间】:2016-12-23 15:27:31
【问题描述】:

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

当我们声明一个变量时,我们使用let name: type = value。好的,我总是指定变量的类型:如果我想要一个字符串,我声明为string,布尔值和数字也是如此。我看到了 any 类型,它可以生成任何类型的变量。

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

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

最好的做法是在为变量赋值时始终设置类型还是不重要?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    Typescript 将避免生成 any 类型的变量。当你在tsconfig.json中将选项noImplicityAny设置为true时,如果不指定类型,甚至会报错,Typescript只能将类型设置为any

    一般来说,当您在 let 中指定类型时,如您的示例中...

    let myNumber: number = 23;
    

    ...您明确地设置了类型。这意味着您清楚地传达了使此变量成为number 的意图。当你分配一个非数字值时,你会得到一个错误。使用显式类型声明 all 变量并没有错,因为这只会提高代码的清晰度。

    另一种选择是隐式输入变量。只有在声明时为变量赋值时才能做到这一点:

    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 中您最好声明一个类或接口并将其用于输入(假设您已声明一个类型 Person):

    let myPerson: Person = { FirstName: "John", LastName: "Doe" };
    

    Typescript 的全部意义在于将静态类型引入 JavaScript。如果你用 any 类型声明你的变量,你将没有静态类型的优势,你可以只使用纯 JavaScript。

    【讨论】:

    • 谢谢,我明白了。我有最后一个问题:这一行let myNumberOrText: number | string = 23; 你是说变量的类型可以是数字或字符串,不是吗?所以我可以用值 23 初始化它,但是在用 'hello' 改变值之后?
    • @albert:没错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2016-08-24
    • 2022-06-15
    • 2012-12-31
    • 2020-12-04
    • 2021-03-27
    相关资源
    最近更新 更多