Skip to content

Commit 5a45c44

Browse files
committed
Dont load JavaScript if types packages are present
1 parent 5f8cf1a commit 5a45c44

File tree

12 files changed

+71
-17
lines changed

12 files changed

+71
-17
lines changed

src/compiler/program.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -779,13 +779,18 @@ namespace ts {
779779
while (true) {
780780
const baseName = getBaseFileName(directory);
781781
if (baseName !== "node_modules") {
782-
const result =
783-
// first: try to load module as-is
784-
loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) ||
785-
// second: try to load module from the scope '@types'
786-
loadModuleFromNodeModulesFolder(combinePaths("@types", moduleName), directory, failedLookupLocations, state);
787-
if (result) {
788-
return result;
782+
// Try to load source from the package
783+
const packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state);
784+
if (packageResult && hasTypeScriptFileExtension(packageResult)) {
785+
// Always prefer a TypeScript (.ts, .tsx, .d.ts) file shipped with the package
786+
return packageResult;
787+
}
788+
else {
789+
// Else prefer a types package over non-TypeScript results (e.g. JavaScript files)
790+
const typesResult = loadModuleFromNodeModulesFolder(combinePaths("@types", moduleName), directory, failedLookupLocations, state);
791+
if (typesResult || packageResult) {
792+
return typesResult || packageResult;
793+
}
789794
}
790795
}
791796

Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
define(["require", "exports", "m1"], function (require, exports, m1) {
1+
define(["require", "exports", "m1", "m4"], function (require, exports, m1, m4) {
22
"use strict";
33
m1.f1("test");
44
m1.f2.a = 10;
5-
m1.f2.person.age = "10"; // Error: Should be number
5+
m1.f2.person.age = "10"; // Should error if loaded the .js files correctly
6+
var r1 = m4.test.charAt(2); // Should error if correctly not using the .js file but using @types info
7+
var r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file
68
});

tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.errors.txt

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
maxDepthIncreased/root.ts(4,1): error TS2322: Type 'string' is not assignable to type 'number'.
1+
maxDepthIncreased/root.ts(7,1): error TS2322: Type 'string' is not assignable to type 'number'.
2+
maxDepthIncreased/root.ts(8,13): error TS2339: Property 'test' does not exist on type 'typeof "C:/src/TypeScript/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@...'.
23

34

45
==== index.js (0 errors) ====
@@ -28,11 +29,22 @@ maxDepthIncreased/root.ts(4,1): error TS2322: Type 'string' is not assignable to
2829

2930
exports.f2 = m2;
3031

31-
==== maxDepthIncreased/root.ts (1 errors) ====
32+
==== entry.d.ts (0 errors) ====
33+
export declare var foo: number;
34+
35+
==== maxDepthIncreased/root.ts (2 errors) ====
3236
import * as m1 from "m1";
37+
import * as m4 from "m4";
38+
3339
m1.f1("test");
3440
m1.f2.a = 10;
35-
m1.f2.person.age = "10"; // Error: Should be number
41+
42+
m1.f2.person.age = "10"; // Should error if loaded the .js files correctly
3643
~~~~~~~~~~~~~~~~
3744
!!! error TS2322: Type 'string' is not assignable to type 'number'.
45+
let r1 = m4.test.charAt(2); // Should error if correctly not using the .js file but using @types info
46+
~~~~
47+
!!! error TS2339: Property 'test' does not exist on type 'typeof "C:/src/TypeScript/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@...'.
48+
49+
let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file
3850

tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.json

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"maxDepthIncreased/node_modules/m2/node_modules/m3/index.js",
1111
"maxDepthIncreased/node_modules/m2/entry.js",
1212
"maxDepthIncreased/node_modules/m1/index.js",
13+
"maxDepthIncreased/node_modules/@types/m4/entry.d.ts",
1314
"maxDepthIncreased/root.ts"
1415
],
1516
"emittedFiles": [
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
"use strict";
22
var m1 = require("m1");
3+
var m4 = require("m4");
34
m1.f1("test");
45
m1.f2.a = 10;
5-
m1.f2.person.age = "10"; // Error: Should be number
6+
m1.f2.person.age = "10"; // Should error if loaded the .js files correctly
7+
var r1 = m4.test.charAt(2); // Should error if correctly not using the .js file but using @types info
8+
var r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file

tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.errors.txt

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
maxDepthIncreased/root.ts(4,1): error TS2322: Type 'string' is not assignable to type 'number'.
1+
maxDepthIncreased/root.ts(7,1): error TS2322: Type 'string' is not assignable to type 'number'.
2+
maxDepthIncreased/root.ts(8,13): error TS2339: Property 'test' does not exist on type 'typeof "C:/src/TypeScript/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@...'.
23

34

45
==== index.js (0 errors) ====
@@ -28,11 +29,22 @@ maxDepthIncreased/root.ts(4,1): error TS2322: Type 'string' is not assignable to
2829

2930
exports.f2 = m2;
3031

31-
==== maxDepthIncreased/root.ts (1 errors) ====
32+
==== entry.d.ts (0 errors) ====
33+
export declare var foo: number;
34+
35+
==== maxDepthIncreased/root.ts (2 errors) ====
3236
import * as m1 from "m1";
37+
import * as m4 from "m4";
38+
3339
m1.f1("test");
3440
m1.f2.a = 10;
35-
m1.f2.person.age = "10"; // Error: Should be number
41+
42+
m1.f2.person.age = "10"; // Should error if loaded the .js files correctly
3643
~~~~~~~~~~~~~~~~
3744
!!! error TS2322: Type 'string' is not assignable to type 'number'.
45+
let r1 = m4.test.charAt(2); // Should error if correctly not using the .js file but using @types info
46+
~~~~
47+
!!! error TS2339: Property 'test' does not exist on type 'typeof "C:/src/TypeScript/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@...'.
48+
49+
let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file
3850

tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.json

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"maxDepthIncreased/node_modules/m2/node_modules/m3/index.js",
1111
"maxDepthIncreased/node_modules/m2/entry.js",
1212
"maxDepthIncreased/node_modules/m1/index.js",
13+
"maxDepthIncreased/node_modules/@types/m4/entry.d.ts",
1314
"maxDepthIncreased/root.ts"
1415
],
1516
"emittedFiles": [

tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/entry.d.ts

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/package.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/entry.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/package.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
import * as m1 from "m1";
2+
import * as m4 from "m4";
3+
24
m1.f1("test");
35
m1.f2.a = 10;
4-
m1.f2.person.age = "10"; // Error: Should be number
6+
7+
m1.f2.person.age = "10"; // Should error if loaded the .js files correctly
8+
let r1 = m4.test.charAt(2); // Should error if correctly not using the .js file but using @types info
9+
10+
let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file

0 commit comments

Comments
 (0)