2017-02-03 34 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]' –