如何在没有特定类型的情况下更新Angular管道

木丝

我正在尝试将Angular管道从应用程序重构到库。管道引用了特定类型,但是我想将其转换为使用通用类型,同时保持其当前类型的安全性。

管:

  import { Pipe, PipeTransform } from ...
  import { MyCustomTypeOne } from ...
  import { MyCustomTypeTwo } from ...
  import { MyCustomService } from ...

  @Pipe({ name: 'customPipe' })
export class CustomPipe implements PipeTransform {

  constructor(private myService: MyCustomService) {}

  transform(value: MyCustomTypeOne, details: MyCustomTypeTwo): string {
    return this.MyCustomService.getResult(
      value.customPropertyOne,
      value.customPropertyTwo,
      details.customPropertyOne
    );
  }
}

我如何更新此代码,以便在将其移至库时不必引用自定义类型?

更新:

我有一项业务需要不要将类型移动到库中。在文件顶部声明具有特定/泛型属性的类型是否是反模式?这是否可以确保类型安全?

例:

  ...

  interface MyCustomTypeOne {
    customPropertyOne: any;
    customPropertyTwo: any;
    [key: string]: any;
  }

  interface MyCustomTypeTwo {
    customPropertyOne: any;
    [key: string]: any;
  }

  @Pipe({ name: 'customPipe' })
  export class CustomPipe implements PipeTransform {

  constructor(private myService: MyCustomService) {}

  transform(value: MyCustomTypeOne, details: MyCustomTypeTwo): string {
  ...

麦威尔逊

这样做的问题是您需要那些类型的某些属性。因此,例如,您有MyCustomTypeOneMyCustomTypeTwo具体来说,您在.customPropertyOne之后.customPropertyTwo

这意味着此管道功能只能与存在这些属性的类型一起使用。话虽如此,将它们提取到库的外部只是将模型(MyCustomType*迁移到库中而不是库外部的问题。

这意味着在管道功能中唯一要更新的是从中导入模块的位置。

另一件事是您提到使用泛型我认为您不想在这里使用泛型,因为这更多地涉及返回类型。这有点主观,因为存在一个使用泛型而不实际与输出有任何关系的用例。如果要使用泛型,则可能如下所示:

  transform<T, U>(value: T, details: U): string {
    return 'something';
  }

要么

  transform<T>(value: T, details: T): string {
    return 'something';
  }

但是,请记住,当你做到这一点,T并且U是通用的类型。例如,有人可以传入一个Date对象。这会中断,因为Date对象没有customPropertyOne等。要记住的另一件事是,您永远不会显式调用该transform函数。有角的。因此,您将永远无法真正获得传递通用类型的机会。

我认为您只想将模型移到您的库中,而不是将它们设为“通用”模型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Revit Python Shell:如何在项目中没有实例的情况下获取“管道类型”族的类型名称?

如何在没有重复的情况下更新

用管道卷曲:如何在没有进度表的情况下打印错误?

如何在没有sudo apt-get update的情况下通过Terminal更新特定软件?

在没有YAML的情况下如何在代理池下使用特定的私有代理?

如何在没有特定出现的情况下替换特定字符串

如何在没有for循环的情况下累积具有特定位置的矩阵?

如何在没有访问类类型的情况下获取类成员

如何在没有注册表编辑的情况下从程序取消文件类型的关联?

如何在没有列名的情况下更改 Pandas 中的列类型?

没有类型定义的情况下如何在Typescript中导入节点模块?

Swift 3:如何在没有多个if语句的情况下分配不同选项类型的变量?

在没有 TypeScript 的情况下,这种类型注释如何在 React 代码中工作?

如何在没有类型错误的情况下根据列名填充默认值 - Pandas

如何在没有返回类型或回调的情况下执行DELETE请求?[改造]

如何在没有警告的情况下强制转换java.lang.Class <?>类型的对象?

如何在没有dynamic_cast的情况下对派生类型实现“较少”?

如何在F#中没有度量的情况下创建度量记录类型

如何在没有类型安全的情况下进行编程

如何在没有输入类型的情况下禁用ckeckbox?

在有或没有管道的情况下,如何在k折交叉验证后提取重要特征?

如何在没有互联网的情况下获取更新?

如何在没有根密码的情况下运行软件更新?

如何在没有超时的情况下锁定Ibm Db2中的更新行?

如何在没有android studio的情况下更新gradle?

实体框架 - 如何在没有视图模型的情况下更新多个表

如何在没有docker-compose停机的情况下重建和更新容器?

如何在没有 BeginInvoke 或 Invoke 的情况下从异步例程更新 UI

如何在没有Android Studio的情况下更新Android模拟器?