-
Notifications
You must be signed in to change notification settings - Fork 12.6k
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
tsc --init update 2024 #58420
Comments
Module options look good to me for Node.js / library authoring. I assume you’ve intentionally left in some redundancies so that good option A stays set if someone changes/removes option B that’s currently making A redundant. For good measure, a list of those:
The one that’s missing from this good-but-redundant category is TLDR looks good 👍 |
Though originally I was thinking more about So I'm generally in favor around |
👍 / 👎 ?
|
Pretty much everybody is going to debug at some point, and it’s going to be bad until they realize they need to enable |
The only thing that sucks about having options commented out is you can't hover on them to see the description of what they do, which doesn't help when you don't know what something does and want to know if you should enable it. Unfortunately most options don't have an explicit setting that means "use the default behavior, whatever it happens to be today", so no easy solutions to be found here. |
I could also suggest turning off |
My suggestion is that the tsconfig should only configure basic type checking and avoid trying to add things that users may need. Developers will refer to the documentation to configure what they really need; there's no need to overcomplicate things. In China, there’s an idiom called “画蛇添足,” which literally means adding feet to a snake while drawing it. This idiom refers to the act of making unnecessary additions that complicate things rather than enhancing them. Adding a lot of options and comments that no one knows who will use or when they will be used exemplifies this unnecessary complication. Attempting to predict developers' environments to generate targeted default configurations and comments will never satisfy everyone. Since that’s the case, why not keep things a little simpler? Therefore, only the most basic configurations should be added, representing the minimal TS/JavaScript development environment. As for what specific options developers actually need, that’s not something we should be concerned about. Regarding the option comments in tsconfig, simply replacing them with a $schema field would suffice; don’t treat developers like idiots, managing them like a nagging mother. |
{
// For more info, see https://aka.ms/tsconfig
"compilerOptions": {
// File layout
"rootDir": "./src",
"outDir": "./dist",
// Environment settings
// See also https://aka.ms/tsconfig_modules
"module": "nodenext",
"target": "esnext",
"types": [],
// For nodejs:
// "lib": ["esnext"],
// "types": ["node"],
// and npm install @types/node
// Other outputs
"sourceMap": true,
// "declaration: true,
// Stricter typechecking options
// "noUncheckedIndexedAccess": true,
// "exactOptionalPropertyTypes": true,
// Style options
// "noImplicitReturns": true,
// "noImplicitOverride": true,
// "noUnusedLocals": true,
// "noUnusedParameters": true,
// "noFallthroughCasesInSwitch": true,
// "noPropertyAccessFromIndexSignature": true,
// We recommend all of these options
"strict": true,
"verbatimModuleSyntax": true,
"isolatedModules": true,
"moduleDetection": "force",
"skipLibCheck": true
}
} |
^ One issue with the above is that |
I think Also I would love this starter to document how to configure TS for bundlers: /* If you compile/transpile your code with TS */
"outDir": "./dist",
"sourceMap": true,
// "declaration: true, // emit d.t.s
/* If you compile your code with a bundler, remove the section above and uncomment this one: */
// "moduleResolution": "bundler",
// "allowImportingTsExtensions": true,
// "noEmit": true, |
I'd like to put in a pitch for That's often the right value if you're migrating from JS and want to keep the same file layout, and it's also what you want to do if you have things like a top-level Your src/ folder might look like:
And |
Acknowledgement
Comment
Following up from #58417
Note: This is only for argumentless
tsc --init
. We know that it's physically possible to write text after--init
and that text could do something, but that's a separate issue. Sincetsc --init
should do something, this issue is only about what that something is.General consensus from the design meeting + external discussion:
"module": "commonjs"
is a hard noOther live issues:
types
to[]
- yesudfcf
- I would argue moot by now since we should set the target high enough that this doesn't matterpackage.json
contents when creatingtsconfig.json
undertsc --init
to determine better defaults #51207 - consultpackage.json
- it's not obvious that yourpackage.json
is configured yet at the time you runtsc --init
, this seems marginalOther things we didn't get to:
rootDir
,outDir
: These are generally a good idea; no one likes the default side-by-side JS emit buuut there aren't strictly universal conventions hereProposed new output:
I tried to order this from "most likely to edit" to "least likely to edit"
The text was updated successfully, but these errors were encountered: