【问题标题】:How to add custom "typings" in typescript 2.0 / 3.0如何在 typescript 2.0 / 3.0 中添加自定义“打字”
【发布时间】:2016-12-22 15:45:26
【问题描述】:

根据this 文章 typescript 2.0 的分型系统已更改,因此现在不清楚如何附加自定义分型。我应该总是为此创建 NPM 包吗?

提前谢谢你!

【问题讨论】:

  • 你的意思是模块扩充(即扩展模块)吗?
  • 只是一个简单的事情,需要为“@type”系统未覆盖的外部JS代码提供声明(我无法通过npm发布这些类型,代码和接口都是私有的)

标签: typescript typescript2.0


【解决方案1】:

您可以仅为您的项目创建本地自定义类型,您可以在其中为 JS 库声明类型。为此,您需要:

  1. 创建目录结构以保存您的类型声明文件,以便您的目录结构类似于以下内容:

     .
     ├── custom_typings
     │   └── some-js-lib
     │       └── index.d.ts
     └── tsconfig.json
    
  2. index.d.ts 文件中,为您的 JS 库添加声明:

     declare module 'some-js-lib' {
       export function hello(world: string): void
     }
    
  3. (可选:如果您有 TypeScript >= 4.x,则跳过) 在您的 tsconfig.jsoncompilerOptions 部分添加对此类型声明的引用:

     {
       "compilerOptions": {
         ...
         "typeRoots": ["./node_modules/@types", "./custom_typings"]
       },
       ...
     }
    
  4. 在你的代码中使用声明的模块:

     import { hello } from 'some-js-lib'
    
     hello('world!')
    

【讨论】:

  • 我不确定第 3 步是否必要。没有它似乎对我有用。此外,index.d.tsdeclarations.d.ts 似乎可以在项目中的任何位置使用。
  • 是的,您可以将您的declare module ... 放入任何.d.ts 文件中。
  • 第 3 步是必须的,但您只需要指定“typeRoots”,而不是“types”。此外,您将清除默认路径,因此您应该使用 "typeRoots": ["custom_typings", "node_modules/@types"]
  • 一旦覆盖 typeRoots,它就会忽略 node_modules/@types。所以 "typeRoots": ["custom_typings"] 禁用默认行为。您需要重新添加它。这显然是typescriptlang.org/docs/handbook/…中的文档
  • @StevenSpungin 我已经用 TypeScript 2.5.3 进行了检查,你是对的——不再需要显式引用类型化模块,是的,你现在还需要添加 node_modules/@types 回来。我已经更新了答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2015-10-11
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多