下面是TypeScript中非常简单的示例。你能解释为什么第二个表达式在"测试"部分是有效的(其他不是,因为它是预期的)相应的TS操场?
let p = '{pattern}';
let a = 'bar ' + p + ' foo';
let h: { key: string } = { key: a};
let k = 'key';
let n = 0;
// tests
a.replace(p, n);
h[k].replace(p, n);
h.key.replace(p, n);
h['key'].replace(p, n);
我最好的猜测是,它以某种方式与哈希/或与之相关的工作有关,但我缺乏一些知识..
答案 0 :(得分:1)
第二次测试:
h[k].replace(p, n);
编译器没问题,因为h[k]
的类型为any
,因为您正在使用索引访问该属性。
如果您希望编译失败,则需要执行以下操作:
let h: { [key: string]: string } = { key: a };
h[k].replace(p, n); // Error: Argument of type 'string' is not assignable to parameter of type 'RegExp'