仅在声明文件中定义Typescript文件的接口是典型的吗?

仅在声明文件中定义Typescript文件的接口是典型的吗?,typescript,Typescript,在工作中,我们有一个大型项目,最初是在typescript 1.x上使用名称空间创建的,在从混合的全局脚本迁移之后,立即执行分配给变量的函数以模拟JavaScript中的类 它目前在typescript 2.5上,大多数(但不是全部)接口(我们为类编写的)都是在.d.ts文件中定义的 此外,外部库中有很多过时的.d.ts文件,这些文件会导致错误,这些错误已经得到解决,因为我们没有使用@类型化包,并且类型的版本不一定与js库或当前版本的typescript相匹配,这显然是一个糟糕的情况 如果删除所

在工作中,我们有一个大型项目,最初是在typescript 1.x上使用名称空间创建的,在从混合的全局脚本迁移之后,立即执行分配给变量的函数以模拟JavaScript中的类

它目前在typescript 2.5上,大多数(但不是全部)接口(我们为类编写的)都是在.d.ts文件中定义的

此外,外部库中有很多过时的.d.ts文件,这些文件会导致错误,这些错误已经得到解决,因为我们没有使用
@
类型化包,并且类型的版本不一定与js库或当前版本的typescript相匹配,这显然是一个糟糕的情况

如果删除所有的.d.ts文件,就会出现错误,因为可以理解,它是定义接口的唯一地方

我问过一些人为什么会这样做,他们告诉我TS for Interface中的声明文件可以像C头一样,加快编译、类型检查,并帮助外部库访问代码

因此,我认为最初的意图是将这些文件作为早期模块的一种形式,但现在我们的项目在使用es6风格的导入/导出语句时变得混乱

namespace place.UI.group {
    import IDetailsConfiguration = Configuration.IDetailsConfiguration;
    import IGroupConfiguration = Configuration.IGroupConfiguration;
    import LookupValueDataService = Data.LookupValueDataService;

    export class GroupViewModel extends kendo.data.ObservableObject {
并注释掉对旧.d.ts文件的引用,例如

//

//

我担心,由于开发人员不理解名称空间和es6模块之间的差异(我自己也在其中!),可能会在某个地方出现一个微妙的错误


很好地回答了声明文件中的接口问题,但是分离接口是否加快了推理/编译/分析?如果是这样,有没有更好的方法将公共接口从这些伪模块名称空间中分离出来,然后在类型已经可用时手动创建.d.ts文件?或者tsc编译器是否足够聪明,可以使用正确的编译器标志执行此操作?

您能否给出一个具体的代码示例,您正在尝试做什么/改进/重构?我在你提到的帖子中给出了一个答案,也许这已经有帮助了。我的问题是关于在.d.ts文件中定义接口是否在编译性能方面有优势(特别是)或一般原因的知识。从我的观点来看,与使用已知的包管理技术(我们还没有对类型使用这些技术)相比,为其他项目使用.d.ts文件会导致它们的规格不足和过时。我希望能够使用正式的“打字”,而不是这些过时的版本,但是,我们自己的ts文件有几个包含接口的.d.ts文件。它们可能是旧代码的残余,是从jsI迁移过来的frm遗留下来的。毫无疑问,在不同的地方编写相同的代码有任何性能优势。据我所知,使用.d.ts文件的目的是,您可以提供一个JavaScript库/API,然后为其提供键入,而无需复制整个API代码。如果说有性能优势的话,那就是用户在构建项目时不需要将API从Typescript重新编译为JavaScript。如果您实际上正在编写和修改API代码,那么您必须重新编译它。