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

标签 angular typescript modifier mapped-types

我有一个 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 修饰符的功能(请参阅 PRRoadmap )。

您可以使用一种技巧来实现以前版本的 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/

相关文章:

typescript - 声明一个克隆函数以使只读属性在 TypeScript 中可写?

java - Java 中的一个接口(interface)可以有且只能有一个 public 修饰符。为什么其余的不允许?

c - 特殊字符的 printf 宽度修饰符

javascript - 如何重新加载当前页面?

javascript - 关于每次 URL 更改的通知

typescript :尽管在构造函数中初始化了变量值未定义

php - 未知修饰符 - preg_match_all

Angular2 获取 ActivatedRoute url

angular - 错误 TS2741 : Property is missing in type

node.js - Angular 6 和 Nodejs : No 'Access-Control-Allow-Origin' header is present on the requested resource