我有一个 node.js 项目,我在其中成功使用了自定义 mapped type
export type Mutable<T> = {
-readonly [P in keyof T]: T[P];
};
但是如果我将相同的代码添加到 Angular 6 项目中,编译会失败并显示:
ERROR in src/assets/scripts/utils.ts(2,5): error TS1131: Property or signature expected.
src/assets/scripts/utils.ts(2,27): error TS1005: ']' expected.
src/assets/scripts/utils.ts(2,28): error TS1005: ';' expected.
src/assets/scripts/utils.ts(14,29): error TS1128: Declaration or statement expected.
src/assets/scripts/utils.ts(3,1): error TS1128: Declaration or statement expected.
为什么会发生这种情况以及如何解决?
提前谢谢大家!!
最佳答案
您正在使用旧版本的 typescript(2.7 或更低版本)。仅在 2.8 中添加了显式删除 readonly
修饰符的功能(请参阅 PR 和 Roadmap )。
您可以使用一种技巧来实现以前版本的 typescript 中删除只读结果,如here所述
type MutableHelper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P]};
type Mutable<T> = MutableHelper<T, keyof T>;
关于Angular 无法编译 Typescript 的映射类型修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51612777/