facebook / create-react-app

Set up a modern web app by running one command.
https://create-react-app.dev
MIT License
102.56k stars 26.79k forks source link

Question: should we use `allowSyntheticDefaultImports:true` or `skipLibCheck:true` in every React project? #8964

Open xiaoxiangmoe opened 4 years ago

xiaoxiangmoe commented 4 years ago

There are currently two ways of writing in the community:

In TypeScript Documentation it write:

import * as React from "react";

and in CRA:

https://github.com/facebook/create-react-app/blob/9123aae7a3beaba8b245f73eb0180baa7b2f8411/packages/cra-template-typescript/template/src/index.tsx#L1


For users of a library, both usages are allowed. Because CRA has enabled allowSyntheticDefaultImports and skipLibCheck.

https://github.com/facebook/create-react-app/blob/30fc0bf5ed566d9b42194d56541d278013d7928c/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js#L104-L106


But for users of the library, the problem arises:

If I write a library usingimport React from 'react';.

Then downstream users must enable allowSyntheticDefaultImports or skipLibCheck, otherwise they will not be able to use this library in Typescript.

For users who configure webpack and tsconfig themselves, it is common to turn off allowSyntheticDefaultImports and skipLibCheck(default behavior).


Question: Which of the following two methods is more recommended?

Whichever method we choose, we should specify this behavior in the react / create-react-app / TypeScript documentation website, and we should have some more detailed suggestions for the react library authors and react library users.


related issues:

@ianschmitz @gaearon @RyanCavanaugh @DanielRosenwasser @orta

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had any recent activity. It will be closed in 5 days if no further activity occurs.

ianschmitz commented 4 years ago

Once the react RFC is figured out we can provide recommendations here I think.

orta commented 4 years ago

FWIW, we recommend skipLibCheck as true since 3.9

WRT: allowSyntheticDefaultImports my personal preference is to have it off, but that depends on the RFC results in general (and probably a shift in culture overall to * as x)

xiaoxiangmoe commented 4 years ago

@orta why we should enable skipLibCheck since 3.9?

ianschmitz commented 4 years ago

In my experience type checking is significantly faster with skipLibCheck on.

xiaoxiangmoe commented 4 years ago

This will be much faster, and I will also set skipLibCheck:true in development. But this will hide the library errors, so I usually set skipLibCheck: false when compiling in production mode.