TypeScript:从node_modules导入外部模块

2023-11-23

有一个npm模块one-two-three例如。 里面有TS文件index.ts(主要)和functions.ts.

函数.ts:

export interface IPoint {
    x: number;
    y: number;
}

export function sum(a: IPoint, b: IPoint): IPoint {
    return {
        x: a.x + b.x,
        y: a.y + b.y
    };
}

索引.ts:

import functions = require("./functions");

export var sum: typeof functions.sum = functions.sum;

compile:

tsc --module commonjs --declaration index.ts

文件已创建:index.js, index.d.ts, functions.js and functions.d.ts. Ok.

还有一个依赖的库one-two-three.

npm install --save one-two-three

我想包含依赖项并使用它和接口functions.ts.

import mo = require("one-two-three");

Error Cannot find external module 'one-two-three'.

/// <reference path="node_modules/one-two-three/index.d.ts" />
import mo = require("one-two-three");

没有反应。

import mo = require("./node_modules/one-two-three");

Fail.

declare var require;

var mo = require("one-two-three");    

它编译成功。 但没有类型检查。 可以写:mo.unknownFunction()它将被编译。 无法使用接口。

如何使上述描述正确?

UPDATE

我已经实现了预期的行为如下。 编辑 d.ts 文件。

函数.d.ts:

declare module "one-two-three.functions" {
    export interface IPoint {
        x: number;
        y: number;
    }
    export function sum(a: IPoint, b: IPoint): IPoint;
}

索引.d.ts:

/// <reference path="./functions.d.ts" />

declare module "one-two-three" {
    import functions = require("one-two-three.functions");
    export var sum: typeof functions.sum;
}

使用它:

/// <reference path="node_modules/one-two-three/index.d.ts" />
/// <reference path="node_modules/one-two-three/functions.d.ts" />

import oneTwoThree = require("one-two-three");
import functions = require("one-two-three.functions");
import IPoint = functions.IPoint;

function delta(a: IPoint, b: IPoint): number {
    var dx: number = a.x - b.x,
        dy: number = a.y - b.y;
    return Math.sqrt(dx * dx + dy * dy);
}

var point1: IPoint = {x: 10, y: 20},
    point2: IPoint = {x: 5, y: 5};

console.log(oneTwoThree.sum(point1, point2));
console.log(delta(point1, point2));

成功。 但我们必须履行双重职责。 编写代码并单独描述接口。

有没有办法生成正确的 d.ts? 问题是 d.ts 应该使用内部语法来描述模块(module {})。 但源文件是CommonJS模块。 它没有该部分module.


/// <reference path="node_modules/one-two-three/index.d.ts" />
import mo = require("one-two-three");

没有反应。

它应该有效。

A file .d.ts在 TypeScript 中就像一个文件.h在C中。从另一个项目或子项目导入依赖项时使用它是正常的。

如果文件your-project/node_modules/one-two-three/index.d.ts写的不正确,建议复制到your-project/one-two-three.d.ts,然后修复副本。使用模块名称作为文件名使得/// <reference选修的。写吧:

import mo = require("one-two-three");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript:从node_modules导入外部模块 的相关文章

  • 如何将yarn add/npm install与monorepos一起使用

    我需要从 GitHub 中的私有 monorepo 下载节点包 类似于 monorepoProject subProjectA subProjectB 还有两个子项目A and 子项目B是 typescript 项目 如下图所示 subPr
  • 打字总是抱怨全局模块

    我对打字稿很陌生 无论我尝试安装什么类型 我都会得到 打字错误 消息 尝试将 Angular 编译为外部模块 但它看起来像全局模块 我只是想做 typings install dt angular 我究竟做错了什么 Update 如果您对此
  • TypeScript - 如何从方法的参数推断类泛型类型?

    我正在尝试从稍后调用的方法参数中输入类泛型 在我们调用带有泛型参数的方法之前 类的泛型类型是不知道的 然后 对于任何其他方法 将传递泛型类型 老实说 对我来说 这似乎是一个非常复杂的功能 我什至不确定 TypeScript 是否有办法做到这
  • 如何扩展类型参数,使其仅允许字符串文字类型,而不允许“字符串”本身?

    我需要一个本质上是 除 reservedKeywords 之外的任何字符串 的类型 然而 这显然是要么不可能 要么棘手且笨拙 https stackoverflow com a 63549561 1730082 我可以满足于必须指定要使用的
  • 角度距离计算

    我正在使用角度制作距离计算应用程序 Html
  • TypeScript 接口函数属性:有什么区别?

    有人可以解释一下 为什么在这段代码中 对 Interface 类型常量的赋值有效 但对 Interface 类型常量的赋值会抛出错误 interface InterfaceA doSomething data object boolean
  • 为什么TS中的通用接口不能正确推断类型?

    一旦 延长Explicit value 在泛型接口中使用时 TS 的类型系统会变得 愚蠢 即使代码 100 正确 function fn
  • Visual Studio 2013 的 TypeScript 1.3 缺少 SDK 目录 (tsc.exe)

    Typescript v1 3 是今天宣布 http blogs msdn com b typescript archive 2014 11 12 announcing typescript 1 3 aspx 所以我安装了VS2013 的电
  • 为什么 TypeScript 中默认导出接口有限制?

    我正在使用 TypeScript 1 5 beta 并且尝试将接口导出为默认导出 以下代码会在 Visual Studio 和 WebStorm 中导致错误 export default interface Foo 但是 下面的代码可以正常
  • 如何向 React 中的 onChange 函数传递附加参数

    所以 我遇到了这个问题 我这里有这种类型的元素 显然在更改输入时有事件 是否可以像这样传递参数并访问事件 如果是这样 我该怎么办 this function accepts two other params index stringValu
  • Angular RouteReuseStrategy 后退按钮/跨模块

    有关我的应用程序的信息 Angular 12 由 3 个模块组成 每个模块都有一个带有列表的概述页面和一些详细信息页面 每条路线都有一个区域标签 因此我知道用户正在哪个模块中导航 所以我想实现 Angular 的 RouteReuseStr
  • 使用 vue-cli 服务时如何禁用 linting?

    我正在使用以下命令使用 vue cli 运行我的项目 vue cli service 服务 open 如何禁用所有 linting 目前每次保存时都会重新进行 linting 并且更改代码需要很长时间 我已经把 lintOnSave fal
  • 如何在 TypeScript 中声明私有抽象方法?

    如何在 TypeScript 中正确定义私有抽象方法 这是一个简单的代码 abstract class Fruit name string constructor name string this name name abstract pr
  • 从字符串变量导入模块

    我需要从内存变量导入 JavaScript 模块 我知道这可以使用SystemJS and Webpack 但我找不到一个好的工作示例或文档 文档主要讨论 js 文件的动态导入 基本上我需要像下面这样导入模块 let moduleData
  • 如何在 TypeScript 中输入这个“as”JSX 属性?

    我正在描述一个 React 库 它通过名为的属性获取组件或 HTML 标签名称as 当给出as属性 它根据该组件 标签名称创建一个元素 并传递任何其他给定的属性 这里有些例子
  • 不要使用对象作为类型

    我收到 lint 错误 不要使用对象作为类型 当我使用对象作为类型时 示例如下 export const myFunc obj object string gt return obj toString 知道我应该为具有未知属性的对象赋予什么
  • nextjs/image 中属性“src”的类型不兼容

    我正在使用 React dropzone 在我的简单应用程序中上传多图像 为了显示要删除的图像类型 我使用 TypeScript 创建了一个单独的组件 但 Next js 图像 src 显示错误 如类型 src string alt str
  • 如何让 Typescript 获取声明文件?

    My file src auth ManagementAPI ts使用 Auth0 我需要使用自己的声明文件并创建src types auth0 d ts 然而 当我跑步时ts node 我收到此错误 TSError Unable to c
  • 在打字稿中获取类的键

    我有一个包含很多方法的类 我们称之为 myClass 我这样称呼它 myClass key 有没有办法从 key 获取可能的值 我希望有类似 keyof myClass 的东西 但我得到 myClass 引用一个值 但在这里被用作类型 问题
  • Angular 4 中的箭头函数(Lambda 函数)

    我对lambda知之甚少 lambda表达式被视为一个函数 我们有很多方法可以做到这一点 这是我的简单功能TypeScript file byPan card1 card2 return card1 pan card2 pan 我在 HTM

随机推荐

  • 在WPF中,如何设置外边框、居中边框和内边框?

    例如 当我为按钮设置边框时 它是外边框 但是 如果我希望它居中或位于内部 最简单的方法是什么 我的意思是 因此 要重新创建您的示例 请使用以下快速概念示例替代方案 然而 有很多不同的方法可以实现相同的效果 但这里至少有一些
  • 使用媒体查询 CSS 的 Internet Explorer 11

    我正在 IE 11 上进行一些测试 它使用的是移动设备的 CSS 而不是 全屏 CSS Chrome Firefox Opera 和 Safari 都使用正确的 全屏 CSS 但 IE 11 正在抓取移动 媒体 CSS 我已经多次清除缓存并
  • C++17 之前的函数交错

    看看这个简单的函数调用 f a b 根据标准 调用顺序为a and b 未指定 C 17 有附加规则不允许a and b 交错 据我所知 在C 17之前 没有这样的规则 现在 看看这个简单的代码 int v 0 int fn int t v
  • 当表单获得焦点时发生的事件

    我有两种形式 第一个是 frmBase 第二个是 frmBalloon 我改变两种形式的焦点 首先显示 frmBase 然后显示 frmBalloon frmBase 不可见 然后再次显示 frmBase 现在我需要首先发生的事件frmBa
  • 将jetty 7更新到jetty 8:java.lang.NoClassDefFoundError:javax / servlet / FilterRegistration

    我正在尝试通过嵌入jetty来开发一个Web服务器 所以使用 jetty 7 3 一切正常 昨天我将 jetty 库更新到了最新版本 8 0 3 现在我通过创建 ServletContextHandler 得到了异常 线程 main 中的异
  • Zend_Db:如何通过 SSH 隧道连接到 MySQL 数据库?

    如何使用 PHP 和 Zend Framework 连接到需要 SSH 隧道的 MySQL 数据库 只需启动 SSH 隧道并使用本地端口作为 MySQL 端口即可 例如 您这样启动隧道 ssh f email protected L 330
  • 在一个语句中创建一个带有名称的数字向量?

    我试图将函数参数的默认值设置为命名数字 有没有一种方法可以在一条语句中创建一个 我检查了 numeric 和 vector 但似乎并非如此 也许我可以转换 强制矩阵或 data frame 并在一个语句中实现相同的结果 需要明确的是 我正在
  • 使用散景流式传输两条线图

    我想创建一个可视化效果 其中有两个线图 每条线图每秒更新一个新点 我最近阅读了有关散景的内容 发现它可以用于实时可视化数据流 但是 我还不知道如何在其中编码 如果有人能向我展示如何使用散景来完成这项任务 我将不胜感激 谢谢 For boke
  • PostgreSQL:将 UUID 转换为 OID

    PostgreSQL 中是否有函数可以将 UUID RFC 4122 转换为 OID ISO 8824 2 25 之后的值 是 UUID 的整数十进制编码 它必须是单个整数的直接十进制编码 全部 128 位 它不能被分解成多个部分 例如该函
  • Maven:在测试前提取依赖资源

    我有一个多模块 Maven 项目 一个子项目托管 XSL XML 资源文件 另一个项目托管需要在其单元测试中使用这些文件的 Java 代码 在依赖项的 jar 中 资源位于文件夹中xml resources 我找到了这个example并尝试
  • 链接器命令失败,退出代码为 1(使用 -v 查看调用)、Xcode 8、Swift 3

    我无法摆脱这个错误 我尝试过各种方法 例如清除派生数据 首选项 gt 位置 gt 单击灰色箭头在 Finder 中打开派生数据文件夹 gt 右键单击 移至垃圾箱 清理项目 CMD Shift K 或 Product gt Clean 更新
  • 设置 Android 照片 EXIF 方向

    我编写了一个以编程方式捕获照片的 Android 活动 我想将图像保存为具有正确 EXIF 方向数据的 JPEG 就像本机 Android 相机应用程序自动执行的那样 这是实际拍照的方法 我删除了 try catch 块 private v
  • 如何检查列表中的所有元素是否都存在于 pandas 列中

    我有一个数据框和一个列表 df pd DataFrame id 1 2 3 4 5 6 7 8 char a b a b c a c b c c a d c d a names a c 我只想在两者都满足的情况下获取行a and c两者都存
  • 每个 Windows 操作系统的注册表中的 CurrentVersion 值

    我想知道CurrentVersion每个操作系统的值 HKLM SOFTWARE Microsoft Windows NT CurrentVersion 例如 我的机器上安装了 Windows 7 Professional 并且Curren
  • MVC4 中捆绑的正确方法

    我对捆绑脚本和样式文件的正确方法有点困惑 目前 我的 BundleConfig cs 如下所示 bundles Add new ScriptBundle bundles jquery Include Scripts jquery versi
  • 你能摆脱 Groovy 的“each”闭包吗?

    是否有可能break来自 Groovy each Closure 或者我应该使用经典循环 不 你不能在不抛出异常的情况下中止 每个 如果您希望中断在特定条件下中止 您可能需要经典循环 或者 您可以使用 find 闭包而不是each 并在需要
  • 在 Storyboard 中创建自定义 UITableViewCell

    想要创建一个静态菜单 IOS 5 并尝试在故事板中创建自定义单元格 然后加载到分组的表格视图上 我已经创建了出口 property nonatomic strong IBOutlet UITableViewCell labelCell Vi
  • 缺少“PLAIN”nodemailer 的凭据

    我正在尝试在联系表单中使用 nodemailer 来接收反馈并将其直接发送到电子邮件 这是下面的表格
  • 如何获取该文件夹中的文件夹列表?

    如何获取该文件夹中的文件夹列表 查找第一个文件Ex FindExSearchLimitToDirectories WIN32 FIND DATA fi HANDLE h FindFirstFileEx dir FindExInfoStand
  • TypeScript:从node_modules导入外部模块

    有一个npm模块one two three例如 里面有TS文件index ts 主要 和functions ts 函数 ts export interface IPoint x number y number export function