TypeScript不合并来自多个文件的名称空间
问题描述:
我已经用typings
导入了类型,并且需要使用其他方法定义来扩展其中的一些。例如,我有这个文件Mocha
:TypeScript不合并来自多个文件的名称空间
// /typings/globals/mocha/index.d.ts
declare namespace Mocha {
interface IRunnable {
title: string;
fn: Function;
async: boolean;
sync: boolean;
timedOut: boolean;
}
interface ITest extends IRunnable {
parent: ISuite;
pending: boolean;
state: 'failed'|'passed'|undefined;
fullTitle(): string;
}
}
我需要添加到IRunnable
一种方法和重载ITestDefinition
。在这种情况下,键入是错误的 - 该方法存在但不在类型声明中。所以我尝试添加一个单独的文件
// /typings/global/custom-additions/index.d.ts
declare namespace Mocha {
interface IRunnable {
timeout(value:boolean):void;
}
interface ITestDefinition {
(expectation: string, callback?:() => void): Mocha.ITest;
}
}
这让我在自定义添加自己的错误:
自定义添加/ index.d.ts(420,65):错误TS2694:命名空间'“.../custom-additions/index”.Mocha'没有导出成员'ITest'。
而且还尝试参照所添加的timeout()
方法时的误差:
测试/ runner.ts(65,31):错误TS2339:属性 '超时' 上不存在类型“ITEST ”。
截至custom-additions
顶部我试过新增以下的:
/// <reference types="Mocha" />
import 'mocha';
import * as Mocha from 'mocha';
由于没有解决的第一个错误。
在调用的代码我已经试过进口摩卡都通过
import Mocha = require('mocha');
和
import * as Mocha from 'mocha';
我还添加了
import 'custom-additions';
没有成功。
我很感激我在做错误的尝试合并这些命名空间的指针。这只是一个例子 - 我有几乎相同的问题与十几个其他类型的定义。大多数自定义添加都涉及实际的自定义设置,其他自定义添加类型如上所述。
答
,你可以增加mocha
作为一个模块:
declare module "mocha" {
interface IRunnable {
timeout(value:boolean):void;
}
}
详情请参阅this comment。
这并没有解决任何错误。我尝试'完全按照说明声明模块“mocha”,以及'声明模块“Mocha”'这将匹配原始类型的情况。我也回顾了似乎与全球型增强有关的评论链接,这不适用于引用的摩卡类型。谢谢你的建议。 –
@SamuelNeff:有趣。任何你仍在使用'typings'工具的理由?我通过'npm i --save-dev @ types/mocha'和扩充工程安装了这些类型。 – Saravana
没有特别的原因,'typings'完全被npm @types所取代了吗?我不确定。除了他们放置文件的位置以外,它们的实现方式是否不同?谢谢! –