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

时间:2018-07-31 11:51:41

标签: angular typescript modifier mapped-types

我有一个node.js项目,我在其中成功使用了自定义mapped type

export type Mutable<T> = {
    -readonly [P in keyof T]: T[P];
};

但是如果我将相同的代码添加到Angular 6项目中,编译将失败:

  

src / assets / scripts / utils.ts(2,5)中的错误:错误TS1131:应为属性或签名。
  src / assets / scripts / utils.ts(2,27):错误TS1005:“]”。
  src / assets / scripts / utils.ts(2,28):错误TS1005:“;”预期。
  src / assets / scripts / utils.ts(14,29):错误TS1128:需要声明或声明。
  src / assets / scripts / utils.ts(3,1):错误TS1128:需要声明或声明。

为什么会这样,我该如何解决?

提前谢谢大家!

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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