我有一个课程,我在我的应用程序中的多个地方使用。
import { TemplateRef } from '@angular/core';
export class ObjectPropertyDisplayStrategy<T> {
content: TemplateRef<any> | ((record: T) => string) | string;
displayStrategyType: DisplayStrategyType;
constructor(content: TemplateRef<any> | ((record: T) => string) | string) {
this.content = content;
setDisplayStrategyType(this, content);
}
}
从Typescript注释可以看出,构造函数需要将一个参数传递给它,类型为TemplateRef
或Function
或String
。然后它将此参数传递给函数setDisplayStrategyType
function setDisplayStrategyType(
displayStrategy: { displayStrategyType: DisplayStrategyType },
content: TemplateRef<any> | ((record: any) => string) | string
) {
if (Object.getPrototypeOf(content).constructor.name === 'TemplateRef_') {
displayStrategy.displayStrategyType = DisplayStrategyType.Template;
return;
}
switch (typeof content) {
case typeof Function:
displayStrategy.displayStrategyType = DisplayStrategyType.FunctionTransform;
break;
case typeof String:
default:
displayStrategy.displayStrategyType = DisplayStrategyType.String;
break;
}
}
此函数尝试确定将三种类型中的哪一种作为参数传递,然后设置一个枚举值,允许某些显示逻辑出现在Angular组件中。
具体来说,对于TemplateRef
类型,它是通过以下逻辑确定的:if (Object.getPrototypeOf(content).constructor.name === 'TemplateRef_')
。这在我使用ng build
构建项目时有效。当我运行ng build --prod
时,它会停止工作,似乎是因为当所有内容都被弄糊涂时,TemplateRef_
对象变为类似e
的内容。关于答案here的第一条评论中提到了此问题。
我已尝试使用TemplateRef
符号来处理此问题,如下所示:
const a = typeof TemplateRef;
const b = new TemplateRef();
const c = Object.getPrototypeOf(TemplateRef);
与ViewChild
装饰器一样,因为它似乎是Angular中创建TemplateRef
实例的一种方式。
const a = typeof ViewChild;
const b = new ViewChild();
const c = Object.getPrototypeOf(ViewChild);
这些策略似乎都不起作用。是否有一种可靠的方法来构建一个新的TemplateRef
对象,我可以比较&#39;类型&#39;用我的传递属性或其他方式来做出这个决定,以便我的图书馆可以继续使用prod构建吗?