【问题标题】:Describing a nested object for typescript .d.ts file描述 typescript .d.ts 文件的嵌套对象
【发布时间】:2020-04-19 16:02:56
【问题描述】:

在我的项目中,我正在导入一个对象。该对象是由一个函数创建的,因此 IDE 不知道上面有什么键(它们是动态的,基于提供的配置)。我的想法是,我可以生成一个描述该对象的.d.ts 文件,以便希望了解其中的键的人们可以在 IDE 中通过代码完成找到它们。

// dynamicObject.js
export default makeAnObject(config);
// useObject.js
import someObject from './dynamicObject.js';

const result = someObject.| (code editor dropdown of keys here)

另一方面,我对.d.ts 文件与这些文件放在同一目录中感兴趣。我假设tsconfig.json 可以处理这个问题,我只是不知道.d.ts 文件的语法是什么样的。 Typescript 对我来说非常陌生,文档也没有帮助。

对于我的dynamicObject.d.ts 文件,我从这样的东西开始

declare namespace someObject {
   interface oneKey {
      nestedKey: string
   }
}

但代码编辑器仍然不知道对象组合是什么。我不确定这是我编写.d.ts 文件的方式还是我在tsconfig.json 中缺少的东西?

编辑:将我的tsconfig.json 作为第一个答案包含在内是行不通的。希望拥有最基本的配置,但我可以想象它可能会丢失更多:


{
    "compileOnSave": true,
    "compilerOptions" : {
       "baseUrl": "./",
       "paths": {
           "*" : ["myCustomTypings/**.d.ts"]
       }
    }
}

EDIT2 我暂时将.d.ts 文件移动到与dynamicObject.js(命名为dynamicObject.d.ts)相同的目录中,现在IDE 可以判断它是typeof someObject,但不能告诉对象的结构。我如何描述dynamicObject.d.ts 中的对象?

【问题讨论】:

    标签: javascript typescript namespaces declare .d.ts


    【解决方案1】:

    需要在tsconfig.json中声明typeRoots。

    下面是例子

    {
      "compilerOptions" : {
        "typeRoots" : [ "./node_modules/@types", "./src/types"]
    }
    

    【讨论】:

    • 这不起作用,我包含了我当前的配置(它本身似乎也没有做任何事情),从我快速阅读的内容来看,typeRoots 不经常使用和隐藏在文档的原因我不完全理解。然后每个人都被指向使用baseUrlpaths
    • 我想我知道为什么它不起作用了。我相信typeRoots 用于项目中的命名模块。这只是在项目中导入相对路径。我的印象是我应该使用 baseUrlpaths 键,但肯定有其他问题。
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多