我在两个独立的文件中有两个类,一个是从另一个扩展而来的.基类包含大约import条使用 node 模块的语句.我不清楚为什么派生类(在一个单独的文件中)不能识别基类!!!???

有人能澄清一下吗?

// 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);
        }
   }
}

然后

// 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'

推荐答案

A solution with namespaces (not recommended)

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

// 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 {
    }
}

然而,如果目的是组织代码,那么同时使用namespaces(ES6) modules是不好的做法.用Node.js,你的文件是模块,那么你应该避免使用名称空间.

Use ES6 modules without namespaces

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(使用编译器选项中的commonjs模块语法).

有关ES6模块语法的详细介绍,请参阅read this article.

Use a file tsconfig.json instead of /// <reference

注意:语法/// <reference替换为the file tsconfig.json. node 的一个例子.js:

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6"
  },
  "exclude": [
    "node_modules"
  ]
}

Typescript相关问答推荐

类型脚本中的Gnomeshell 扩展.如何导入.ts文件

如何将绑定到实例的类方法复制到类型脚本中的普通对象?

为什么在TypScript中写入typeof someArray[number]有效?

TypScript ' NoInfer '类型未按预期工作

处理API响应中的日期对象

为什么TypeScript失go 了类型推断,默认为any?''

异步动态生成Playwright测试,显示未找到测试

react 路由6操作未订阅从react 挂钩表单提交+也不使用RTK查询Mutations

如何键入函数以只接受映射到其他一些特定类型的参数类型?

编剧错误:正在等待Expect(Locator).toBeVisible()

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

在类型脚本中创建泛型类型以动态追加属性后缀

基于泛型的条件接口键

作为函数参数的联合类型的键

是否将Angular *ngFor和*ngIf迁移到新的v17语法?

基于闭包类型缩小泛型类型脚本函数的范围

如何为对象数组中的每个条目推断不同的泛型

如何通过nx找到所有受影响的项目?

带有过滤键的 Typescript 映射类型

类型为 `(callback: (...args: T) => void, params: T)` 的函数的泛型