最近在学 React, 发现可以
import React, { useState } from "react;
也可以直接使用 React.useState ,很好奇就看了一下源码,结果就遇到了下面这行代码:
export = React; export as namespace React;
declare namespace React { ... }
一脸闷逼啊! export default 我知道,但是 export =
是个什么鬼,还有 export as namespace
又是个啥?
网上找了一圈,说是为了兼容 CommonJS 和 AMD ,还是不太懂,我自己也新建了个文件模仿了一下,发现运行出错,这个是要添加什么依赖?
1
newbieRenew 2022-09-12 18:16:49 +08:00 via iPhone
v17 以后不用声明 import React 了,默认就能用,估计和这个有关。
|
2
walking50w 2022-09-12 18:22:49 +08:00 3
你看了 j8 源码, 那是 *.d.ts typescript 给 react 库写的的 type
源码在 node_module/react 包下面,不是在 node_module/@types/react 下面 兼容我猜测你说的下面这种的代码,存在 react 稍早以前的版本上面 'use strict'; const React = require('./src/React'); module.exports = React.default || React; |
3
Leviathann 2022-09-12 18:31:08 +08:00
老版本的 ts 语法,当年还没有 esm 的时候 ts 自己搞了一套 module/namespace 机制
|
4
zhengjian 2022-09-12 20:08:52 +08:00
|
5
xingguang 2022-09-15 16:54:57 +08:00
react 有默认导出,也有方法导出,默认导出的是 React ,那些 hooks 就是当作 react 的方法导出的,这个是导出规则的问题,一个文件只能有一个默认导出,但是可以有很多方法和对象的导出
|