antd 的 lib 目录下 TypeScript 定义和 js 文件 module.exports 不一致?

antd 的版本是:2.9.1 , node 的版本是:6.10.2 , tsc 版本是: 2.2.2 。

Button 这个组件为例。

根据 文档,在 ts 中我可以这样来引用(样式不用管):

import Button from 'antd/lib/button';
render(Button);

上面的 TypeScript 代码,通过 tsccommonjs 方式来处理,结果是:

var button_1 = require("antd/lib/button");
render(button_1.default);

这就不对了。

因为 antd/lib/button/index.js 这个文件,最后加了一句:

module.exports = exports['default'];

于是, button_1 本来就是需要的对象了(一个函数),再取这个函数的 default 属性,就错了。


这样回过去看,按说,在 TypeScript 中应该写成:

import * as Button from 'antd/lib/button';
render(Button);

但是这又和 antd/lib/button/index.d.ts 中的定义不匹配,因为 index.d.ts 明确是:

export default Button;

所以,从现在的情况看:

  • 要么,把 antd/lib/button/index.js 最后一行多余的 module.exports 删除掉。

  • 要么,在 antd/lib/button/index.d.ts 中,只是 export Button ,不要那个 default

或者,是我哪里没用对?

阅读 5.6k
1 个回答

antd的tsconfig里应该有这样一条配置,正常引用应该没问题的吧,楼主是直接编译antd的ts?

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