2017-01-25 4 views
1

変数の型の反復を宣言します他のタイプのものであってもよい。活字体は、次のように私はtypescriptです変数を宣言しています

let foo = this.someFunc(someArg); 

最初の宣言例は、間違っていたり、エラーを考慮する必要があります。

は、fooという宣言が型を指定せずに表現された可能性があることを考えると?

私は現在、プルリクエストでこれが繰り返しであるため間違っていると言われています。

私の見解では、両方の使用法はうまくいきます。最初のものは読みやすく、宣言された変数に割り当てられた戻り値の型を強制します。

タイプコードコードのサンプルでは、​​両方の表記があります。

答えて

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の型を推論します。

これを指定するのは間違いでもなく、エラーでもありません。これはほんの冗長です。
読みやすく、冗長だと思う人もいるので、この冗長な方が好きな人もいます。

あなたのチームのコンベンションは何かを理解し、それに基づいて作業する必要があります。いくつかの状況で

は、それは例えば、しかしそれを使用する方が理にかなって:

あなたは 'B' `としてA`を持つことができ、それがちょうど同じ
+0

、I 'fn'の署名を誤読しました –

+0

申し訳ありませんになりますので、それは必須ではありません

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

関連する問題