typescript中内部模块和外部模块怎么区分的?给三方库写声明文件时用module还是namespace?

最近刚学ts,看到关于ts1.5版本的关于模块的变化后,

  • 有点不太理解内部模块和外部模块怎么区分?
  • 我给从npm安装的没有用ts写的npm包写声明文件.d.ts时
    我是这么引入三方库的

import * as Orientation from 'react-native-orientation';

声明文件这么写的

declare namespace Orientation {
...
}

这样会提示没有声明

但是我如果这么写就ok

declare module 'react-native-orientation'{
...
}

这是为什么?不是在1.5之后不推荐用module了么?到底该怎么自己给三方写声明文件呢?
另外我用到的这个三方库在官方types仓库有人已经定义过了,我没有直接安装只是想自己学下怎么写,我看他们就是用namespace那样子写的,后来我安装了一下,发现也没有报错了,为什么我自己用namespace写就有问题呢?

阅读 3.6k
1 个回答

我这几天才专门了解申明这块.

首先这里针对imoort 模块, 使用namespace 是不对的, 虽然module 不推荐了,但是对于
这种导入的库文件还是必须这样使用的

declare module 'react-native-orientation'{
...
}

这个申明是针对导入的模块没有申明.

而namespace 则相当于定义了一个全局的 变量对象

declare namespace A {
    let name: string;
}

declare const A: {
    name: string
}

// 这二者应该是等价的
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进