Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
xiaoxiangmoe opened this issue May 6, 2020 · 6 comments

Comments

@xiaoxiangmoe
Copy link
Contributor

xiaoxiangmoe commented May 6, 2020

There are currently two ways of writing in the community:

In TypeScript Documentation it write:

import * as React from "react";

and in CRA:


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

skipLibCheck: { suggested: true },
esModuleInterop: { suggested: true },
allowSyntheticDefaultImports: { suggested: true },


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?

  • Force each project to force skipLibCheck.
  • Force each project to force enableSyntheticDefaultImports.
  • We should recommend the author of the library to use import * as React from 'react';, but not restrict library users to use import * as React from 'react'; or import React from 'react';

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
Copy link

stale bot commented Jun 6, 2020

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.

@stale stale bot added stale and removed stale labels Jun 6, 2020
@ianschmitz
Copy link
Contributor

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

@orta
Copy link
Contributor

orta commented Jun 6, 2020

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
Copy link
Contributor Author

@orta why we should enable skipLibCheck since 3.9?

@ianschmitz
Copy link
Contributor

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

@xiaoxiangmoe
Copy link
Contributor Author

xiaoxiangmoe commented Jun 8, 2020

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants