Typescript 2.0 命名空间文件不是模块

4
我正在使用TypeScript 2.1.0和VS Code 1.3,尝试适应TypeScript 2中的模块/命名空间系统。我有一个名为validators.ts的文件。
namespace Validator{
  export interface String{
    isValid(s:string):boolean;
  }
}
declare module 'validator'{
  export = Validator;
}

当我尝试使用以下代码时

import {Validator} from "../validators/validators";

出现错误 validators.ts不是一个模块
我使用npm i @types/myTypes安装了外部类型,并在安装bluebird并复制其结构后仍然看到此错误。这是VS Code的错误还是我的错误?

1个回答

6

这很简单:

export namespace Validator{
  export interface String{
    isValid(s:string):boolean;
  }
}

当你为外部库编写类型定义时,应只使用declare module。对于自己的TypeScript代码,请使用普通的ES6风格的importexport语法。


我该如何正确导入这个接口?import {String} from "../validators/validators"; as no exported member String如果我使用 import * as S from "../validators/validators";,我在智能感知中看不到 String 接口。 - Mega Man
如果您不需要包装“Validator”命名空间,只需从我的代码片段中删除第一行和最后一行即可摆脱它。 - Mattias Buelens
我最感兴趣的是在同一个文件中导出多个接口。有没有一种好的方法可以从同一个文件中导出多个接口? - Mega Man
当然可以,在同一个文件中添加多个导出!export interface A {...} export interface B {...} 当你使用ES6模块时,你不需要真正的命名空间。 - Mattias Buelens
谢谢你提醒我。我不确定是 VS Code 出了问题还是我的 TypeScript 语法有误。+1 - Mega Man
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接