【发布时间】:2021-06-10 06:24:42
【问题描述】:
例如,当我们的组件上有 2 个数组属性时:
-
array:一个普通的Array -
anonymousArrayArray的子类
export class AppComponent {
readonly array = new Array<{
text: string;
value: string;
}>();
readonly anonymousArray = new class extends Array<{
text: string;
value: string;
}> {
add(text: string, value: string) {
this.push({
text,
value
});
}
}();
constructor() {
this.array.push({
text: "text1",
value: "value1"
});
this.anonymousArray.add("text", "value");
}
}
这是完整的Stackblitz example
我首先想知道这怎么可能:即因为 Array.isArray(this.anonymousArray) 是 true,那么模板如何/为什么甚至会看到差异?
这可能是 Ivy 或 angular language service 中的错误吗?
【问题讨论】:
-
代码完成和语法高亮是 IDE/编辑器的功能,与 Angular 或 TypeScript 无关。
-
@ThomasSablik 你认为 IDE 怎么知道提示什么?它肯定与 Angular 有关,它被称为
@angular/language-service -
@RobertoZvjerković IDE 解析代码。因此,不同的 IDE 在代码完成和语法高亮方面有不同的行为。我每天都在使用 IntelliJ 和 VSCode,语法高亮和代码完成方面的差异很大。即使是同一 IDE 或编辑器的两个版本之间的差异也可能很大。这不是关于 Angular 或 TypeScript 的问题。这是关于 IDE 或编辑器的问题。你不会问 Angular 或 TypeScript 团队的人。你应该问 IntelliJ 团队。
-
@RobertoZvjerković 如果实际转译或构建过程失败,这是一个 Angular 或 TypeScript 问题。
-
@ThomasSablik 假设我创建了一种名为 Roberto++ 的语言。我不提供语言 API 和文档。您认为 IDE 如何提供提示和自动完成功能?提示(双关语):它不能。在 Angular 提供
@angular/language-service之前,没有 IDE 提供 Angular 模板自动完成功能。这也是 Typescript 的事情,因为 TS 为 Angular 提供了可以使用的类型。
标签: intellij-idea visual-studio-code code-completion angular-language-service