Angular无法编译Typescript的映射类型修饰符

Angular can't compile Typescript's mapped type modifiers

我有一个node.js项目,在这里我成功使用了自定义映射类型

1
2
3
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.

为什么会发生这种情况,我该如何解决?

谢谢大家!!


最新的@angular/[email protected]使用typescript@~2.7.2,并且映射类型是@typescript@^2.8的功能。


您使用的是较早版本的打字稿(2.7或更低版本)。 显式删除readonly修饰符的功能仅在2.8中添加(请参阅PR和Roadmap)。

您可以使用技巧来实现先前版本的打字稿中的删除只读结果,如下所述

1
2
type MutableHelper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P]};
type Mutable< T > = MutableHelper<T, keyof T>;