首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将其他类型导入到类型记录.d.ts模块中

如何将其他类型导入到类型记录.d.ts模块中
EN

Stack Overflow用户
提问于 2020-10-20 20:57:42
回答 1查看 871关注 0票数 3

我有一个外部模块的自定义.d.ts文件,它看起来像

代码语言:javascript
运行
复制
declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: [number,number,number][]): [number, number]
}

我不想使用[number,number,number],而是使用来自另一个模块的类型,如:

代码语言:javascript
运行
复制
import { vec3 } from 'gl-matrix';

declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: vec3[]): [number, number]
}

当我为vec3添加导入语句时,TSC会抱怨说:

代码语言:javascript
运行
复制
Invalid module name in augmentation. Module 'vertices-bounding-box' resolves to an untyped
module at '/Users/kevzettler/code/hypeworks/node_modules/vertices-bounding-box/index.js', which cannot be augmented. [2665]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-26 22:14:03

您刚刚在进口类型的TypeScript中展示了最流行的用例:

模块可以导入在其他模块中声明的类型。但是非模块全局脚本不能访问模块中声明的类型。输入导入类型。

换句话说,该语言特性允许从项目'gl-matrix'文件的全局范围内导入外部模块.d.ts的类型,如下所示:

代码语言:javascript
运行
复制
// ext-module.d.ts, important: don't use ES import statement here
declare module 'vertices-bounding-box' {
  export default function boundingBox(
    positions: Array<import("gl-matrix").vec3>): [number, number]
}

注意:没有ES import/export的文件是一个全局脚本,而不是一个模块。

'vertices-bounding-box'没有自己的类型,因此需要在全局脚本文件中声明这些类型,如上面所示。对于想要像从DefinitelyTyped / @types那样进行DefinitelyTyped/@types的情况下,应该保持顶级ES导入。

代码语言:javascript
运行
复制
import { vec3 } from 'gl-matrix';
// ...

在这个文件中,因为模块增强需要一个模块。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64453239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档