type-checking doesn't work on type-only modules
See original GitHub issueWhat happens and why it is wrong
When module contains only types (type,interface), and those types are being imported in other module, this plugin will omit those completely from type-checking which causes shipping invalid code to consumers.
🎬 Whole repro can be found here: https://stackblitz.com/edit/github-kgn16z-grsqrq?file=libs/test/rollup-config.js
- run
yarn rollup:tsc
(uses this plugin with rollup) -> this will produce no Type errors 🚨 (Wrong) - run
yarn tsc:check
(uses raw tsc) -> this will properly produce type errors ✅ (Correct, expected)
Source Code
// @filename src/index.ts
export * from './makeStyles';
// @filename src/makeStyles.ts
import { TestType } from './types';
export function makeStyles(): TestType {
return {
color: 'red',
};
}
// @filename src/types.ts
interface CSS {
backgroundColor: string;
}
export type TestType = {
animationName?: CSS['background']; // 🚨 this causes TS error
color: string;
};
Versions
typescript: ~4.4.3 => 4.4.4
rollup@2.67.3
rollup-plugin-typescript2@0.31.2
rollup.config.js
`rollup.config.js`:
import * as path from 'path';
import ts from 'rollup-plugin-typescript2';
const repoRoot = path.resolve(__dirname, '..', '..');
const tsConfig = {
check: true,
tsconfig: 'libs/test/tsconfig.lib.json',
useTsconfigDeclarationDir: true,
verbosity: 4,
tsconfigOverride: {
compilerOptions: {
rootDir: path.resolve(repoRoot, 'libs/test/src'),
allowJs: false,
declaration: true,
declarationDir: path.resolve(repoRoot, 'out/tsc-dts'),
paths: {
test: ['libs/test/src/index.ts'],
},
},
},
};
export default {
input: path.resolve(__dirname, 'src/index.ts'),
output: {
file: path.resolve(repoRoot, 'out/bundle.js'),
format: 'es',
},
plugins: [ts(tsConfig)],
};
tsconfig.json
`tsconfig.json`:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": ["node"]
},
"files": [
"../../node_modules/@nrwl/react/typings/cssmodule.d.ts",
"../../node_modules/@nrwl/react/typings/image.d.ts"
],
"exclude": [
"**/*.spec.ts",
"**/*.test.ts",
"**/*.spec.tsx",
"**/*.test.tsx",
"**/*.spec.js",
"**/*.test.js",
"**/*.spec.jsx",
"**/*.test.jsx"
],
"include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"]
}
package.json
`package.json`:
plugin output with verbosity 4
plugin output with verbosity 3:
rpt2: built-in options overrides: {
"noEmitHelpers": false,
"importHelpers": true,
"noResolve": false,
"noEmit": false,
"inlineSourceMap": false,
"outDir": "/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/placeholder",
"moduleResolution": 2,
"allowNonTsExtensions": true
}
rpt2: parsed tsconfig: {
"options": {
"rootDir": "/home/projects/github-kgn16z-grsqrq/libs/test/src",
"sourceMap": true,
"declaration": true,
"moduleResolution": 2,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": 2,
"module": 99,
"lib": [
"lib.es2017.d.ts",
"lib.dom.d.ts"
],
"skipLibCheck": true,
"skipDefaultLibCheck": true,
"baseUrl": "/home/projects/github-kgn16z-grsqrq",
"paths": {
"test": [
"libs/test/src/index.ts"
]
},
"pathsBasePath": "/home/projects/github-kgn16z-grsqrq/libs/test",
"jsx": 4,
"allowJs": false,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"outDir": "/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/placeholder",
"types": [
"node"
],
"declarationDir": "/home/projects/github-kgn16z-grsqrq/out/tsc-dts",
"configFilePath": "/home/projects/github-kgn16z-grsqrq/libs/test/tsconfig.lib.json",
"noEmitHelpers": false,
"noResolve": false,
"noEmit": false,
"inlineSourceMap": false,
"allowNonTsExtensions": true
},
"fileNames": [
"/home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/cssmodule.d.ts",
"/home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/image.d.ts",
"/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts",
"/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts",
"/home/projects/github-kgn16z-grsqrq/libs/test/src/types.ts"
],
"typeAcquisition": {
"enable": false,
"include": [],
"exclude": []
},
"raw": {
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": [
"node"
],
"rootDir": "/home/projects/github-kgn16z-grsqrq/libs/test/src",
"allowJs": false,
"declaration": true,
"declarationDir": "/home/projects/github-kgn16z-grsqrq/out/tsc-dts",
"paths": {
"test": [
"libs/test/src/index.ts"
]
}
},
"files": [
"../../node_modules/@nrwl/react/typings/cssmodule.d.ts",
"../../node_modules/@nrwl/react/typings/image.d.ts"
],
"exclude": [
"**/*.spec.ts",
"**/*.test.ts",
"**/*.spec.tsx",
"**/*.test.tsx",
"**/*.spec.js",
"**/*.test.js",
"**/*.spec.jsx",
"**/*.test.jsx"
],
"include": [
"**/*.js",
"**/*.jsx",
"**/*.ts",
"**/*.tsx"
],
"compileOnSave": false
},
"errors": [],
"wildcardDirectories": {
"/home/projects/github-kgn16z-grsqrq/libs/test": 1
},
"compileOnSave": false
}
rpt2: typescript version: 4.4.4
rpt2: tslib version: 2.3.1
rpt2: rollup version: 2.65.0
rpt2: rollup-plugin-typescript2 version: 0.31.1
rpt2: plugin options:
{
"check": true,
"tsconfig": "libs/test/tsconfig.lib.json",
"useTsconfigDeclarationDir": true,
"verbosity": 4,
"tsconfigOverride": {
"compilerOptions": {
"rootDir": "/home/projects/github-kgn16z-grsqrq/libs/test/src",
"allowJs": false,
"declaration": true,
"declarationDir": "/home/projects/github-kgn16z-grsqrq/out/tsc-dts",
"paths": {
"test": [
"libs/test/src/index.ts"
]
}
}
},
"clean": false,
"cacheRoot": "/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2",
"include": [
"*.ts+(|x)",
"**/*.ts+(|x)"
],
"exclude": [
"*.d.ts",
"**/*.d.ts"
],
"abortOnError": true,
"rollupCommonJSResolveHack": false,
"transformers": [],
"tsconfigDefaults": {},
"objectHashIgnoreUnknownHack": false,
"cwd": "/home/projects/github-kgn16z-grsqrq",
"typescript": "version 4.4.4"
}
rpt2: rollup config:
{
"external": [],
"input": "/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts",
"plugins": [
{
"name": "rpt2"
},
{
"name": "stdin"
}
],
"output": [
{
"file": "/home/projects/github-kgn16z-grsqrq/out/bundle.js",
"format": "es",
"plugins": []
}
]
}
rpt2: tsconfig path: /home/projects/github-kgn16z-grsqrq/libs/test/tsconfig.lib.json
rpt2: included:
[
"*.ts+(|x)",
"**/*.ts+(|x)"
]
rpt2: excluded:
[
"*.d.ts",
"**/*.d.ts"
]
rpt2: Ambient types:
rpt2: /home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/cssmodule.d.ts
rpt2: /home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/image.d.ts
rpt2: /home/projects/github-kgn16z-grsqrq/node_modules/@types/node/index.d.ts
rpt2: transpiling '/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts'
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/code/cache/c054c5afccc541591135fb48ef93844cf144244d'
rpt2: cache hit
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/syntacticDiagnostics/cache/c054c5afccc541591135fb48ef93844cf144244d'
rpt2: cache hit
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/semanticDiagnostics/cache/c054c5afccc541591135fb48ef93844cf144244d'
rpt2: cache hit
rpt2: generated declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts'
rpt2: dependency '/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts'
rpt2: imported by '/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts'
rpt2: resolving './makeStyles' imported by '/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts'
rpt2: to '/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts'
rpt2: transpiling '/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts'
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/code/cache/f1f8bd7cd1ae728a9fe42101454aeb9263d56bc2'
rpt2: cache hit
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/syntacticDiagnostics/cache/f1f8bd7cd1ae728a9fe42101454aeb9263d56bc2'
rpt2: cache hit
rpt2: cache: '/home/projects/github-kgn16z-grsqrq/node_modules/.cache/rollup-plugin-typescript2/rpt2_4b2584b8fec2cb2070a57cc5fc1737a58e40ee79/semanticDiagnostics/cache/f1f8bd7cd1ae728a9fe42101454aeb9263d56bc2'
rpt2: cache hit
rpt2: generated declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts'
rpt2: generating target 1
rpt2: rolling caches
rpt2: generating missed declarations for '/home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/cssmodule.d.ts'
rpt2: generating missed declarations for '/home/projects/github-kgn16z-grsqrq/node_modules/@nrwl/react/typings/image.d.ts'
rpt2: generating missed declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/types.ts'
rpt2: emitting declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/index.ts' to '/home/projects/github-kgn16z-grsqrq/out/tsc-dts/index.d.ts'
rpt2: emitting declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/makeStyles.ts' to '/home/projects/github-kgn16z-grsqrq/out/tsc-dts/makeStyles.d.ts'
rpt2: emitting declarations for '/home/projects/github-kgn16z-grsqrq/libs/test/src/types.ts' to '/home/projects/github-kgn16z-grsqrq/out/tsc-dts/types.d.ts'
created out/bundle.js in 949ms
Related issues
https://github.com/ezolenko/rollup-plugin-typescript2/issues/211
Issue Analytics
- State:
- Created 2 years ago
- Reactions:3
- Comments:7 (1 by maintainers)
Top Results From Across the Web
Python 3 type check not works with use typing module?
Python's type hints are informational only. Type checking or automatic coercion of argument types are not part of the language.
Read more >type-only imports — A new TypeScript feature that benefits ...
Let's briefly cover how Babel and TypeScript work together. ... The type-checking provided by tsc when the isolatedModules compiler flag is ...
Read more >How to start type-checking a large Python codebase - Quantlane
Begin with opt-in: only modules explicitly listed in mypy invocation are checked. You can even start with just one module. $ mypy models/...
Read more >Documentation - Type Checking JavaScript Files - TypeScript
Type Checking JavaScript Files · Properties are inferred from assignments in class bodies · Constructor functions are equivalent to classes · CommonJS modules...
Read more >Python Type Checking (Guide) - Real Python
If you want to just get a quick glimpse of how type hints work in Python, ... If you need to use the...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Yep, looks like a bug – rollup never processes
types.ts
file, which is expected becausemakeStyles.ts
doesn’t import anything that would show up in js. But typescript should have flagged the error when processingmakeStyles.ts
itself…#345 has been released in
0.33.0