microsoft / microsoft/TypeScript

skipLibChecks specificity

Open
#63,397 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Needs Proposal Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

### 🔍 Search Terms

skipLibCheck specific files

### ✅ Viability Checklist

- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
- [x] This wouldn't change the runtime behavior of existing JavaScript code
- [x] This could be implemented without emitting different JS based on the types of the expressions
- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- [x] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals

### ⭐ Suggestion

Currently `skipLibCheck` is an all or nothing proposition. You either suppress all errors from declaration files or you get errors from all declaration files. This is not really an accurate reflection of how declaration files are usually used. Almost all projects use declaration files from a trusted source, like npm. Errors from these files are usually not relevant and can be safely suppressed. Many projects however also have declaration files they write by hand (usually for interop with js files, or for libraries that are not typed) - these generally should be type checked since they are actively authored as part of the project.

Ideally `skipLibCheck` would allow us to more granularly control which declaration files are checked and which are not. This allows us to reap the performance benefits of `skipLibCheck` while not sacrificing type checking on authored code.

# Proposal

One possible solution would be to allow `skipLibCheck` to be a list of glob patterns for which type checking should be skipped. This would be a simple solution allowing users to decide what declaration files they want and don't want checked.

While this solution is probably the simplest one to implement, we should consider other ones.

### 📃 Motivating Example

We have a custom build tool that uses the compiler API to force some declaration files to skip checking by setting their `hasDefaultLib` flag and using `skipDefaultLibCheck` instead of `skipLibCheck`. While this solution worked well in the past this is not really a supported solution which we expect will break (6.0 already breaks our current implementation - we have found an alternate implementation, 7.0 will make any sort of custom solution much more difficult)

### 💻 Use Cases

1. What do you want to use this for?
Improve build performance of TypeScript projects.

2. What shortcomings exist with current approaches?
You can suppress errors from all declaration files or from none. There is no granular control over it.

3. What workarounds are you using in the meantime?
Use the compiler API to control which declaration files are checked.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the proposal and the current skipLibCheck and skipDefaultLibCheck compiler-option behavior. The issue names no files or tests, so locate the compiler-option handling and related test coverage before deciding among glob patterns or other designs. Done means declaration-file checking can be controlled granularly while retaining the stated performance benefits.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.