如何在 TypeScript 中通过导入使用命名空间

2024-01-02

我在两个单独的文件中有两个类,一个从另一个文件扩展。基类包含一些import使用节点模块的语句。我不清楚为什么派生类(位于单独的文件中)无法识别基类!!!???

有人可以澄清一下吗?

// UtilBase.ts

/// <reference path="../typings/node.d.ts" />
/// <reference path="../typings/packages.d.ts" />

import * as path from "path"; // <---- THIS LINE BREAKS THE BUILD!!!!

namespace My.utils {

    export class UtilBase {

        protected fixPath(value: string): string {
            return value.replace('/', path.sep);
        }
   }
}

And then

// UtilOne.ts
/// <reference path="UtilBase.ts" />

namespace My.utils {

    export class UtilOne extends My.utils.UtilBase {

    }
}

编译后我得到:

src/UtilOne.ts(6,47): error TS2339: Property 'UtilBase' does not 
exist on type 'typeof utils'

解决方案与命名空间(不建议)

要解决您的问题,您可以导出命名空间:

// UtilBase.ts
import * as path from "path";
export namespace My.utils {
    export class UtilBase {
        protected fixPath(value: string): string {
            return value.replace('/', path.sep);
        }
   }
}

然后,您应该能够导入它:

// UtilOne.ts
import {My} from './UtilBase';
namespace My.utils {
    export class UtilOne extends My.utils.UtilBase {
    }
}

但是,如果目的是组织代码,这是一个不好的做法命名空间 and (ES6) 模块同时 https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html#needless-namespacing。对于 Node.js,您的文件是模块,那么您应该避免命名空间。

Use ES6模块没有命名空间

TypeScript 很好地支持 ES6 模块的语法:

// UtilBase.ts
import * as path from "path";
export default class UtilBase {
    protected fixPath(value: string): string {
        return value.replace('/', path.sep);
    }
}

// UtilOne.ts
import UtilBase from './UtilBase';
export default class UtilOne extends UtilBase {
}

这是推荐的方式。 ES6 模块可以通过重命名每个导入的资源来防止命名冲突。

它将在 Node.js 上运行。

有关 ES6 模块语法的详细介绍,阅读这篇文章 https://hacks.mozilla.org/2015/08/es6-in-depth-modules/.

使用文件tsconfig.json代替/// <reference

注意:语法/// <reference被替换为文件tsconfig.json https://www.typescriptlang.org/docs/handbook/tsconfig-json.html。 Node.js 的示例:

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6"
  },
  "exclude": [
    "node_modules"
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 TypeScript 中通过导入使用命名空间 的相关文章

随机推荐

  • StackExchange.Redis 超时 GET

    我在使用 StackExchange Redis 时遇到超时问题 我已经尝试过在 stackoverflow 上找到的所有内容 这是我得到的 Timeout performing GET XXX inst 4 mgr ProcessRead
  • 无法在单例中创建某些 QML 类型

    我有一个用于样式定义的 QML 单例 定义如下 pragma Singleton import QtQuick 2 2 import QtQuick Controls 1 1 import QtQuick Controls Styles 1
  • Angular4 为存在且公开提供的 json 数据提供 404

    我有一个用 Angular4 编写的测试数据服务 目前看起来是这样的 import Injectable from angular core import Http from angular http import rxjs add ope
  • 如何右对齐内联块元素?

    正如您在下面的 Fiddle 中看到的 http jsfiddle net EvWc4 3 http jsfiddle net EvWc4 3 我目前正在寻找一种方法将第二个链接 link alt 与其父链接 p 的右侧对齐 为什么不使用浮
  • Facebook 图形 API 速率限制和批量请求

    我见过一些人提到的 600 次调用 600 秒的速率限制 例如quora http www quora com Whats the Facebook Open Graph API rate limit 我想知道我是否可以做600batch
  • Flutter 音频播放器返回错误的播放时间?

    我在用着audioplayers 1 1 0从 url 播放音频的插件 玩得很好 但是player onPositionChanged在特定的秒数之后 它会重新启动 并且计时器从 0 开始 这样我的滑块又从 0 开始了 player onP
  • 启动画面在 PhoneGap Build 中不起作用

    无论是 Android 还是 iOS 我都无法让闪屏正常工作 我正在使用 PhoneGap Build 并且我已经像这样设置了 config xml 现在适用于 v3 0 0
  • 如何从 URI 获取完整文件路径

    我想从 URI 获取完整的文件路径 URI 不是图像 而是音乐文件 但如果我像 MediaStore 解决方案那样执行此操作 则如果应用程序用户选择 Astro 作为浏览器而不是音乐播放器 它将无法工作 我该如何解决这个问题 PathUti
  • 搜索数据库 - ASP.NET MVC C#

    我正在尝试在我的 ASP NET MVC C Linq to Sql 网站中实现完整的搜索功能 该网站由大约 3 4 个表组成 其中包含我想要搜索的大约 1 2 列 这是我到目前为止所拥有的 public List
  • UITableView 自定义节标题,重复问题

    我在为自定义 UITableView 部分标题设置动画时遇到问题 目标是创建可折叠的部分 当我第一次点击自定义标题时 它会按预期进行动画处理 但此后每次它都会在原始位置留下重复项并为另一个进行动画处理 图片示例 My Custom Head
  • 将 NA 值替换为组值

    我有一个 df 如下 有 5 个家庭 20 人 家庭中的某些人缺少关于是否拥有医疗卡的数据 我想为这些人提供与家庭中其他人相同的值 不是 NA 值 而是 0 或 1 的真正二进制值 我已经尝试了以下代码 我认为这是朝着正确方向迈出的一步 但
  • 编译时触发 std::vector 的范围检查

    目标 我想要一个范围检查版本std vector s operator 对于我的调试版本 在发布模式下没有范围检查 调试模式下的范围检查显然有利于调试 但它会导致我的发布代码减慢 5 10 这是我希望避免的 可能的解决方案 我在 Strou
  • 如果单元格自动更新,“编辑”功能将不起作用 - 需要解决方法 Google 表格

    当您手动更改单元格时 此代码将按预期工作 function onEdit event assumes source data in sheet named Prepsheet target sheet of move to named To
  • Android应用程序强制关闭时会发生什么

    我很想知道当应用程序在很长一段时间内没有响应时 当用户单击弹出窗口中的 强制关闭 时会发生什么 哪些事件会被解雇 任务会从托盘中删除吗 我认为当一个活动被强制关闭时 dalvik 将清理应用程序缓存并启动后台堆栈中的最后一个活动 但不确定它
  • XSD 两个具有相同名称但属性值不同的元素

    我正在尝试为以下内容定义 XSD 模板
  • 如何修复 python `dlib` 错误:“在平面命名空间 '_png_do_expand_palette_rgb8_neon' 中找不到符号”?

    我收到错误 symbol not found in flat namespace png do expand palette rgb8 neon 尽管发生了错误dlib正在安装相关 Python 版本的软件包 我正在使用 VSCode 以防
  • 为什么匿名类型不能在方法中传递?

    倾向于不从方法返回匿名类型的设计决策是什么 You can从方法返回匿名类型的实例 但因为您无法命名它 所以您无法准确声明该方法将返回什么 因此您必须声明它只返回object 这意味着调用者将无法对属性等进行静态类型访问 尽管他们仍然可以传
  • Qt/C++:如何获取远程PC(通信对端)MAC地址?

    我在 Windows 7 上使用 Qt5 在我的应用程序中 TCP服务器 我目前正在使用 QTcpSocket 类中的一些方法 QAbstractSocket peerAddress 为了得到对等地址 QAbstractSocket pee
  • 在Entity Framework4中捕获Sql异常?最佳实践是什么?

    您在数据层中使用什么实践来捕获 sql 异常 有人编写了一个通用 Sql 异常处理程序来捕获最常见的错误吗 你是怎么做到的 有什么例子吗 Thanks 仅由底层处理意外异常 数据层 在本例中为实体框架 的异常应仅由业务层处理 然后 业务层可
  • 如何在 TypeScript 中通过导入使用命名空间

    我在两个单独的文件中有两个类 一个从另一个文件扩展 基类包含一些import使用节点模块的语句 我不清楚为什么派生类 位于单独的文件中 无法识别基类 有人可以澄清一下吗 UtilBase ts