mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Add test demonstrating interop for esbuild and webpack
This commit is contained in:
@@ -4047,9 +4047,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
|
||||
function canHaveSyntheticDefault(file: SourceFile | undefined, moduleSymbol: Symbol, dontResolveAlias: boolean, usage: Expression) {
|
||||
const usageMode = file && getModuleFormatInteropKind(compilerOptions) !== ModuleFormatInteropKind.Babel && getUsageModeForExpression(usage);
|
||||
// fallthrough on cjs usages so we imply defaults for interop'd imports, too
|
||||
if (usageMode === ModuleKind.ESNext) {
|
||||
return isESMFormatImportImportingCommonjsFormatFile(usageMode, file!.impliedNodeFormat);
|
||||
// fallthrough on cjs usages so we imply defaults for interop'd imports, too
|
||||
}
|
||||
if (!allowSyntheticDefaultImports) {
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/index.ts(2,5): error TS2339: Property 'toLowerCase' does not exist on type 'typeof import("/node_modules/dep/index")'.
|
||||
|
||||
|
||||
==== /node_modules/dep/package.json (0 errors) ====
|
||||
{
|
||||
"name": "dep",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js"
|
||||
}
|
||||
|
||||
==== /node_modules/dep/index.d.ts (0 errors) ====
|
||||
declare const _default: string;
|
||||
export default _default;
|
||||
|
||||
==== /package.json (0 errors) ====
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
==== /index.ts (1 errors) ====
|
||||
import dep from "dep";
|
||||
dep.toLowerCase(); // Error
|
||||
~~~~~~~~~~~
|
||||
!!! error TS2339: Property 'toLowerCase' does not exist on type 'typeof import("/node_modules/dep/index")'.
|
||||
dep.default.toLowerCase(); // Ok
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
//// [tests/cases/conformance/module/esbuildInterop.ts] ////
|
||||
|
||||
//// [package.json]
|
||||
{
|
||||
"name": "dep",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js"
|
||||
}
|
||||
|
||||
//// [index.d.ts]
|
||||
declare const _default: string;
|
||||
export default _default;
|
||||
|
||||
//// [package.json]
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
//// [index.ts]
|
||||
import dep from "dep";
|
||||
dep.toLowerCase(); // Error
|
||||
dep.default.toLowerCase(); // Ok
|
||||
|
||||
|
||||
//// [index.js]
|
||||
import dep from "dep";
|
||||
dep.toLowerCase(); // Error
|
||||
dep.default.toLowerCase(); // Ok
|
||||
@@ -0,0 +1,23 @@
|
||||
//// [tests/cases/conformance/module/esbuildInterop.ts] ////
|
||||
|
||||
=== /node_modules/dep/index.d.ts ===
|
||||
declare const _default: string;
|
||||
>_default : Symbol(_default, Decl(index.d.ts, 0, 13))
|
||||
|
||||
export default _default;
|
||||
>_default : Symbol(_default, Decl(index.d.ts, 0, 13))
|
||||
|
||||
=== /index.ts ===
|
||||
import dep from "dep";
|
||||
>dep : Symbol(dep, Decl(index.ts, 0, 6))
|
||||
|
||||
dep.toLowerCase(); // Error
|
||||
>dep : Symbol(dep, Decl(index.ts, 0, 6))
|
||||
|
||||
dep.default.toLowerCase(); // Ok
|
||||
>dep.default.toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
|
||||
>dep.default : Symbol(dep.default, Decl(index.d.ts, 0, 31))
|
||||
>dep : Symbol(dep, Decl(index.ts, 0, 6))
|
||||
>default : Symbol(dep.default, Decl(index.d.ts, 0, 31))
|
||||
>toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
//// [tests/cases/conformance/module/esbuildInterop.ts] ////
|
||||
|
||||
=== /node_modules/dep/index.d.ts ===
|
||||
declare const _default: string;
|
||||
>_default : string
|
||||
|
||||
export default _default;
|
||||
>_default : string
|
||||
|
||||
=== /index.ts ===
|
||||
import dep from "dep";
|
||||
>dep : typeof dep
|
||||
|
||||
dep.toLowerCase(); // Error
|
||||
>dep.toLowerCase() : any
|
||||
>dep.toLowerCase : any
|
||||
>dep : typeof dep
|
||||
>toLowerCase : any
|
||||
|
||||
dep.default.toLowerCase(); // Ok
|
||||
>dep.default.toLowerCase() : string
|
||||
>dep.default.toLowerCase : () => string
|
||||
>dep.default : string
|
||||
>dep : typeof dep
|
||||
>default : string
|
||||
>toLowerCase : () => string
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
// @module: esnext
|
||||
// @moduleResolution: bundler
|
||||
// @moduleFormatDetection: bundler
|
||||
// @moduleFormatInterop: bundlernode
|
||||
|
||||
// @Filename: /node_modules/dep/package.json
|
||||
{
|
||||
"name": "dep",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js"
|
||||
}
|
||||
|
||||
// @Filename: /node_modules/dep/index.d.ts
|
||||
declare const _default: string;
|
||||
export default _default;
|
||||
|
||||
// @Filename: /package.json
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
// @Filename: /index.ts
|
||||
import dep from "dep";
|
||||
dep.toLowerCase(); // Error
|
||||
dep.default.toLowerCase(); // Ok
|
||||
Reference in New Issue
Block a user