2017-01-25 101 views
1

我声明一个打字稿变量,如下所示:打字稿声明变量类型重复

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

someFunc是一个函数,它的返回类型Foo的类型相匹配,

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

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

鉴于FOO声明可能已经表示没有指定类型:

let foo = this.someFunc(someArg); 

应该先报关例如被认为是错误或错误?

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

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

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

回答

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; 
} 

Additionaly,如果你犯了一个错误,编译器会告诉你,这样的类型信息的重复是没有重复实际代码的那样糟糕。

FWIW,我的团队已决定输入所有内容,因此我们不必在何时输入内容时不断打电话。唯一的例外是当用new初始化一个字段/变量,并且你不需要该类型成为某个超类/接口。

1

编译器根据函数的返回类型推断出foo的类型,这就是为什么你不需要明确指定它的原因。

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

你将需要弄清楚你的团队在你的约定和工作基础上是什么。

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

interface A { 
    x: number; 
} 

interface B extends A { 
    y: number; 
} 

function fn(): B { return null } 

let a: A = fn(); 
+0

它不是必需的,因为你可以有'了''因为和B'这将是一样的 –

+0

对不起,我误读了'fn'的签名 –