我很惊讶地发现,打字稿意想不到的用途是确定用下面的代码:打字稿:防止物体[指数]
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 - 非常感谢您的链接。我想知道为什么它也是这样实现的。 –