首页 > 解决方案 > 打字稿:如果已经定义了相同的足迹,是否有办法错误地创建界面?

问题描述

我们有相当大的 Angular/Typescript 项目。可以说我定义了接口

export interface RangeNumber {
  from: number;
  to: number;
}

如果同一项目中的某人尝试创建与 RangeNumber 具有完全相同的属性名称/类型的接口,我希望 typescript 或 linter 抛出错误或警告。例如有人创建:

export interface MyRange {
  from: number;
  to: number;
}

否则我必须监督开发人员并确保他们使用我们的通用类/接口而不是重新发明轮子。有办法吗?

标签: typescript

解决方案


您正在寻找的可能是外部静态分析工具,而不是 TypeScript 编译器本身。

想到的一个例子是 PMD 的复制粘贴检测器功能,它在编码中强制执行 DRY 原则:https ://pmd.github.io/pmd-6.23.0/pmd_userdocs_cpd.html

我敢肯定还有其他类似的工具。但是,我认为它们中的任何一个都不会接近完美,因为考虑到它的主观性,检测这样的相似性是一项艰巨的任务。

例如,您可以有两个相同但名称不同的接口,因为它们用于不同的目的:

interface Range {
    from: number;
    to: number;
}

interface Coordinate {
    x: number;
    y: number;
}

在数据类型方面,您可以交换这两者并让代码以完全相同的方式执行。但是保留这两者是有好处的,一个原因是它可以提高代码的可读性并帮助开发人员了解正在发生的事情。


推荐阅读