【问题标题】: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 文件名重要吗?还是它们只是语义?

标签: typescript vue.js typescript-typings vuejs3 typescript-declarations


【解决方案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 等)的默认“形状”。

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 2018-07-29
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多