在社区中有两种编写方式:
在TypeScript文档中写:
import * as React from "react";
在CRA中写:
create-react-app/packages/cra-template-typescript/template/src/index.tsx
第1行:
| | importReactfrom'react'; |
对于库的用户,这两种用法都是允许的。因为CRA已经启用了 allowSyntheticDefaultImports
和 skipLibCheck
。
create-react-app/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js
第104至106行:
| | skipLibCheck: {suggested: true}, |
| | esModuleInterop: {suggested: true}, |
| | allowSyntheticDefaultImports: {suggested: true}, |
但是对于库的用户来说,问题出现了:
如果我使用 import React from 'react';
编写一个库。
那么下游用户必须启用 allowSyntheticDefaultImports
或 skipLibCheck
,否则他们将无法在Typescript中使用这个库。
对于自己配置webpack和tsconfig的用户来说,通常会关闭 allowSyntheticDefaultImports
和 skipLibCheck
(默认行为)。
问题:以下两种方法哪种更推荐?
- 强制每个项目跳过skipLibCheck。
- 强制每个项目启用enableSyntheticDefaultImports。
- 我们应该建议库的作者使用
import * as React from 'react';
,但不限制库用户使用import * as React from 'react';
或import React from 'react';
无论我们选择哪种方法,我们都应该在react / create-react-app / TypeScript文档网站中指定这种行为,并为react库的作者和用户提供一些更详细的建议。
相关问题:
@ianschmitz@gaearon@RyanCavanaugh@DanielRosenwasser@orta
6条答案
按热度按时间hm2xizp91#
这个问题已经被自动标记为过时,因为它没有任何最近的活动。如果没有发生任何进一步的活动,它将在5天后被关闭。
4ngedf3f2#
一旦确定了ReactRFC,我们就可以在这里提供建议。
syqv5f0l3#
FWIW,我们建议将
skipLibCheck
设置为true,因为3.9版本。关于:
allowSyntheticDefaultImports
,我个人的偏好是将其关闭,但这取决于RFC的整体结果(以及文化整体向* as x
的转变)。ih99xse14#
@orta why we should enable skipLibCheck since 3.9?
kxeu7u2r5#
在我的经验中,使用
skipLibCheck
进行类型检查的速度要快得多。iyr7buue6#
这将更快,我还会设置
skipLibCheck:true
进行开发。但这会隐藏库错误,所以在生产模式下编译时,我通常会设置skipLibCheck: false
。