2017-02-03 47 views
2

我很驚訝地發現,打字稿意想不到的用途是確定用下面的代碼:打字稿:防止物體[指數]

interface IFoo { 
    bar: string; 
} 

const foo: IFoo = {bar: 'bar'}; 

console.log(
    foo['anything'] // I'd like typescript to prevent this 
); 

是否有辦法防止[]存取使用在出乎意料的時候?

回答

3

Is there a way to prevent usage of [] accessor when not expected?

如果你想拋出一個錯誤,你可以啓用noImplicitAny flag,這將導致以下錯誤:

Element implicitly has an any type because type IFoo has no index signature.

+0

好的,這就是我爲什麼感到驚訝。我通常默認激活'noImplicitAny'。不幸的是,我還沒有準備好在我目前的項目上激活它。 –

+1

這是一個typecript問題,提供了有關此設計選擇的見解:https://github.com/Microsoft/TypeScript/issues/7660 –

+0

@TomEsterez - 非常感謝您的鏈接。我想知道爲什麼它也是這樣實現的。 –

0

是,簡單地只用點表示如果可以的話(這意味着除非該屬性是從一個變量計算的)。

foo.bar // Ok 
foo.anything // Error 

使用正常屬性的括號符號在Javascript中也是泄露的。

+0

是的,我同意但並不總是適用。例如:'interface用戶{byId:{[id:number]:User}}'會允許'users [1]' –