繁体   English   中英

打字稿声明变量类型重复

[英]Typescript declare variable type repetition

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

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

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

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

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

鉴于可能已经声明了foo声明而未指定类型:

let foo = this.someFunc(someArg);

应该将第一个声明示例视为错误还是错误?

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

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

在打字稿代码示例中,我看到了两种表示法。

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

是的,它是重复的,因为它可以由编译器推断出来。 但是,将它们编写起来使开发人员更容易知道,而不必单击许多功能(因为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初始化字段/变量时,您不需要将类型设置为某些超级类/接口。

编译器根据函数的返回类型来推断foo的类型,这就是为什么您无需显式指定它的原因。

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

您将需要弄清楚您团队中的惯例,并以此为基础开展工作。

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

interface A {
    x: number;
}

interface B extends A {
    y: number;
}

function fn(): B { return null }

let a: A = fn();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM