我很驚訝地發現,打字稿意想不到的用途是確定用下面的代碼:打字稿:防止物體[指數]
interface IFoo {
bar: string;
}
const foo: IFoo = {bar: 'bar'};
console.log(
foo['anything'] // I'd like typescript to prevent this
);
是否有辦法防止[]存取使用在出乎意料的時候?
我很驚訝地發現,打字稿意想不到的用途是確定用下面的代碼:打字稿:防止物體[指數]
interface IFoo {
bar: string;
}
const foo: IFoo = {bar: 'bar'};
console.log(
foo['anything'] // I'd like typescript to prevent this
);
是否有辦法防止[]存取使用在出乎意料的時候?
Is there a way to prevent usage of [] accessor when not expected?
如果你想拋出一個錯誤,你可以啓用noImplicitAny
flag,這將導致以下錯誤:
Element implicitly has an
any
type because typeIFoo
has no index signature.
是,簡單地只用點表示如果可以的話(這意味着除非該屬性是從一個變量計算的)。
foo.bar // Ok
foo.anything // Error
使用正常屬性的括號符號在Javascript中也是泄露的。
是的,我同意但並不總是適用。例如:'interface用戶{byId:{[id:number]:User}}'會允許'users [1]' –
好的,這就是我爲什麼感到驚訝。我通常默認激活'noImplicitAny'。不幸的是,我還沒有準備好在我目前的項目上激活它。 –
這是一個typecript問題,提供了有關此設計選擇的見解:https://github.com/Microsoft/TypeScript/issues/7660 –
@TomEsterez - 非常感謝您的鏈接。我想知道爲什麼它也是這樣實現的。 –