除了可读性之外,“.d.ts”文件名有啥重要意义吗?

Posted

技术标签:

【中文标题】除了可读性之外,“.d.ts”文件名有啥重要意义吗?【英文标题】:Is there any significant meaning for `.d.ts` filenames except for readability?除了可读性之外,“.d.ts”文件名有什么重要意义吗? 【发布时间】:2021-08-11 05:23:51 【问题描述】:

在我的项目中,shims-vue.d.ts 文件夹下有一个shims-vue.d.ts 文件:

declare module '*.vue' 
  import type  DefineComponent  from 'vue'
  const component: DefineComponent<, , any>
  export default component

即使我将shims-vue.d.ts 重命名为foo.d.ts,声明仍然生效,所以我想知道.d.ts 文件名除了可读性之外还有什么重要意义吗?

由于我将它重命名为,它的声明仍然有效,无需手动导入重命名的 .d.ts 文件。

【问题讨论】:

不清楚您在这里实际问的是什么 - Typescript 不是 Java,没有规定文件名必须与源代码中的某些内容匹配。不管是.ts.d.ts.tsx 文件还是其他文件。 问题是询问声明文件命名是否具有任何运行时意义-afaik 我可以将类型声明放在foo.d.tsindex.d.tswhatever-else.d.ts 中,并且仍然让tsc 拾取它们. @zeeshan-siddiqui 解释了什么声明文件是什么,但没有提到任何关于文件命名的内容。 值得注意的是,tsc在任何地方都没有指定他们的名字(不像.ts/.tsx/.js/.jsx,你仍然有指定文件名,地址@kaya3)。为了比较,index.js 具有运行时意义(导入foofoo/index.js 是等价的);有没有和声明文件类似的属性? @superhawk610 我在tsconfig.json 中指定"rootDir": "src",然后我不必在任何地方指定.ts 文件的名称; tsc 只会从那个目录编译它们。 @kaya3 当然可以,但要实际使用任何.ts 文件(index.ts 除外),您必须按名称显式导入它。您不必在任何地方按名称指定 .d.ts 文件,但它们仍然可以在环境中使用 - 那么,.d.ts 文件名重要吗?还是它们只是语义? 【参考方案1】:

声明文件代表另一个 javascript 文件(模块)的类型定义。声明的模块名称必须与将要导入的物理 JavaScript 文件的名称匹配。

例如,为了使以下功能正常工作,既可以用于输入,也可以用于运行时导入:

import  $  from "jquery";

您声明的模块名称必须命名为“jquery”,因为您的 JavaScript 文件是 jquery.js

declare module "jquery" 
    /...

你如何命名声明文件jquery.d.tsmy-declaration.d.ts等并不重要,只要声明的模块名称正确并且对应于物理JavaScript文件即可。

模块声明还支持名称中的通配符,因此在您的情况下,*.vue 表示任何 *.vue 文件(main.vuepage1.vue 等)的默认“形状”。

【讨论】:

以上是关于除了可读性之外,“.d.ts”文件名有啥重要意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

除了在 PL/SQL 中使用 elsif 与嵌套 if 的可读性之外,还有其他原因吗?

除了 std::string_view 方法之外,std::string_view 比 char* 有啥优势吗?

打字稿中的 *.d.ts 与 *.ts 有啥区别?

在“.d.ts”文件中使用“导出声明函数”和“导出函数”有啥区别

在 CSS 中使用相对字体大小真的有啥意义吗?

Maven 放在 JAR 文件中的 POM 文件有啥意义,它被任何东西使用吗?