【问题标题】:Typescript declare variable type repetition打字稿声明变量类型重复
【发布时间】:2017-06-10 19:12:25
【问题描述】:

我声明一个打字稿变量如下:

let foo: any = this.someFunc(someArg);

someFunc 是一个返回类型与 foo 的类型匹配的函数:

public someFunc(arg: any): any {
    return {};
}

返回类型是“any”,但也可以是任何其他类型。

鉴于 foo 声明可能已在未指定类型的情况下表达:

let foo = this.someFunc(someArg);

第一个声明示例应该被认为是错误的还是错误的?

我目前在拉取请求中被告知这是错误的,因为它构成重复。

在我看来,这两种用法都很好,第一种更易读,并强制执行分配给声明变量的返​​回类型。

在打字稿代码示例中,我看到了这两种符号。

【问题讨论】:

    标签: variables typescript types declaration typescript2.0


    【解决方案1】:

    这是您的团队必须做出的风格选择。

    是的,它是重复的,因为它可以被编译器推断出来;但是,将它们写进去让开发人员知道,而不必单击许多函数(因为 someFunc 可能从其他东西推断其类型)会更容易。

    // The compiler knows that a is a number, developers will have to look 
    // inside someFunc and otherFunc to know that
    const a = someFunc();
    function someFunc() {
       return otherFunc();
    }
    function otherFunc(){
        return 1;
    }
    

    另外,如果你犯了错误,编译器会告诉你,所以类型信息的重复并不像复制实际代码那么糟糕。

    FWIW,我的团队决定输入所有内容,这样我们就不必一直打电话询问何时输入内容。唯一的例外是使用new 初始化字段/变量时,您不需要将类型设为某个超类/接口。

    【讨论】:

      【解决方案2】:

      编译器会根据函数的返回类型推断foo 的类型,这就是您不需要显式指定它的原因。

      指定它并没有错,也不是错误,只是更冗长。
      有些人更喜欢这种冗长的方式,因为它更具可读性,有些人认为它是多余的。

      您需要弄清楚您的团队中的约定是什么,并以此为基础开展工作。

      在某些情况下使用它更有意义,例如:

      interface A {
          x: number;
      }
      
      interface B extends A {
          y: number;
      }
      
      function fn(): B { return null }
      
      let a: A = fn();
      

      【讨论】:

      • 这不是必需的,因为您可以将aB 相同,它是一样的
      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2021-02-17
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多