2017-01-25 104 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'的簽名 –