我有一个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:需要声明或声明。
为什么会这样,我该如何解决?
提前谢谢大家!
答案 0 :(得分:2)
您使用的是较早版本的打字稿(2.7或更低版本)。显式删除readonly
修饰符的功能仅在2.8中添加(请参阅PR和Roadmap)。
您可以使用技巧来实现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
的功能。