Bug报告
🔎 搜索词
noPropertyAccessFromIndexSignature
🕗 版本与回归信息
4.2+
- 我在每个版本中都尝试过这种行为
⏯ Playground链接
https://www.typescriptlang.org/play?noPropertyAccessFromIndexSignature=true#code/FAGwpgLgBBYM4QFxQN4G0CWA7AJmAHoggE7YDmAukRKVmQL5QC8qwU7UA9J1AO5h8AhlmgQAFhjgwA9lABGAgMaCArmTHQ5ATyhZpABWLSADmGIQtAQUWL4cAGJGAtgElcBAMoYyWQRBXEYAA08irQGOFwWADkEAB0bByCcorI0RLRQYnseABmaWJgICDSmcD0ANzAwIrSWHDS4HElZAAUsAhxyYoAlFW19Y1gzdJtHfF5fTV1DU0t7fAQaNHd0RRTA7PD8+PLeWt9QA
💻 代码
let test: {[index:string]:string} = {
// we want this to be caught by noPropertyAccessFromIndexSignature, but it isn't.
abc: 'hi',
def: 'hello',
};
console.log(test.abc); // reported
console.log(test.def); // reported
console.log(test['abc']); // OK
console.log(test['def']); // OK
🙁 实际行为
当分配给具有索引签名的类型时,允许未加引号的字符串键。
🙂 预期行为
应有一些机制来限制对象字面量的定义,以便只允许提供不带引号的命名属性({['somekey']: value}
或{'somekey':value}
)。这将防止逻辑错误并提高与Closure Compiler的ADVANCED优化的兼容性。
7条答案
按热度按时间bjg7j2ky1#
这将同时防止逻辑错误并提高与Closure Compiler的高级优化兼容性。
你能详细阐述一下这些动机吗?
9w11ddsr2#
我相信对于逻辑错误,我认为这与
noPropertyAccessFromIndexSignature
有相同的动机。对于 Closure Compiler 的高级优化模式,它根据属性是否被引用来区分可重命名(可优化)的属性。被引用和计算属性不会被重命名或符合优化条件,但 "." 访问/未引用的属性是。在这里noPropertyAccessFromIndexSignature
很有帮助,因为它鼓励一致使用 "引用"。我们支持的一个团队正在寻找某种程度的对象字面量保护,以便分配给具有索引签名的类型。https://developers.google.com/closure/compiler/docs/limitations#implications-of-global-variable,-function,-and-property-renaming:
您可能知道,Closure Compiler 在谷歌中被广泛使用。
5t7ly7z53#
同样,对象解构赋值与属性访问相似,我预计解构索引签名也会给出错误:noPropertyAccessFromIndexSignature。
https://www.typescriptlang.org/play?noPropertyAccessFromIndexSignature=true#code/FAFwngDgpgBAIgSwMYgQewHYEMBOYYC8MASlEmjgCYA8AziDghgOYA0M9jLAfANzDAANlBAwQUegC54yVJlz4iAb2Aw1MAPQaYAd1g6sGUSAAWCWmLQwARrCRYArsxOjr+DGgAKONNBzgAQSQkCVoAMR8AWwBJDEooAA8AZQRmbBAHHCh2awdRBHzaDAByEAA6VXUsayRpYrNi1kq1eIAzOpMoQUE0RuAAX35gLRgAFTMLcxgoAEcHBAA3LGEjSzEJcuqkdloTNAdBShtYQ2mcHxxgcgx6GCUt-sJ1+n5r26VireLpLYBGR6I4heAjeaGEZR6zAAFEDNjUAJSvTC0MFQCFoaGwsptRFXZGo9GYjYAbU+NWKAF1caDwZCYSTim1KYigA
Closure Compiler使用这些语法的所有引用来确定属性名称是否会被重命名。
wooyq4lh4#
@andrewbranch Where would I find the justification for
noPropertyAccessFromIndexSignature
?3phpmpom5#
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-2.html#--nopropertyaccessfromindexsignature. Following the link to the PR should turn up more discussion.
pwuypxnk6#
自从@Kingwl贡献了#40171以来,我猜想核心TypeScript团队可能不会对这个感兴趣。
0aydgbwb7#
根据我所知,@DanielRosenwasser对这个标志非常热情。就我个人而言,我认为它应该放在一个linter中。