mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
fix(42765): require should not work in ts files (#42792)
* add failing test * fix(42765): require should not work in ts files
This commit is contained in:
+13
-12
@@ -3144,18 +3144,19 @@ namespace ts {
|
||||
else if (namespace === unknownSymbol) {
|
||||
return namespace;
|
||||
}
|
||||
if (isInJSFile(name)) {
|
||||
if (namespace.valueDeclaration &&
|
||||
isVariableDeclaration(namespace.valueDeclaration) &&
|
||||
namespace.valueDeclaration.initializer &&
|
||||
isCommonJsRequire(namespace.valueDeclaration.initializer)) {
|
||||
const moduleName = (namespace.valueDeclaration.initializer as CallExpression).arguments[0] as StringLiteral;
|
||||
const moduleSym = resolveExternalModuleName(moduleName, moduleName);
|
||||
if (moduleSym) {
|
||||
const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym);
|
||||
if (resolvedModuleSymbol) {
|
||||
namespace = resolvedModuleSymbol;
|
||||
}
|
||||
if (
|
||||
namespace.valueDeclaration &&
|
||||
isInJSFile(namespace.valueDeclaration) &&
|
||||
isVariableDeclaration(namespace.valueDeclaration) &&
|
||||
namespace.valueDeclaration.initializer &&
|
||||
isCommonJsRequire(namespace.valueDeclaration.initializer)
|
||||
) {
|
||||
const moduleName = (namespace.valueDeclaration.initializer as CallExpression).arguments[0] as StringLiteral;
|
||||
const moduleSym = resolveExternalModuleName(moduleName, moduleName);
|
||||
if (moduleSym) {
|
||||
const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym);
|
||||
if (resolvedModuleSymbol) {
|
||||
namespace = resolvedModuleSymbol;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
//// [tests/cases/compiler/resolveNameWithNamspace.ts] ////
|
||||
|
||||
//// [node.d.ts]
|
||||
declare function require(moduleName: string): any;
|
||||
|
||||
declare module "assert" {
|
||||
export function equal(actual: any, expected: any, message?: string | Error): void;
|
||||
}
|
||||
|
||||
//// [ns.ts]
|
||||
/// <reference path="node.d.ts"/>
|
||||
namespace myAssert {
|
||||
export type cool = 'cool'
|
||||
}
|
||||
var myAssert = require('assert')
|
||||
|
||||
//// [app.js]
|
||||
exports.equal = myAssert.equal
|
||||
exports.equal()
|
||||
|
||||
//// [ns.js]
|
||||
/// <reference path="node.d.ts"/>
|
||||
var myAssert = require('assert');
|
||||
//// [app.js]
|
||||
exports.equal = myAssert.equal;
|
||||
exports.equal();
|
||||
@@ -0,0 +1,40 @@
|
||||
=== tests/cases/compiler/node.d.ts ===
|
||||
declare function require(moduleName: string): any;
|
||||
>require : Symbol(require, Decl(node.d.ts, 0, 0))
|
||||
>moduleName : Symbol(moduleName, Decl(node.d.ts, 0, 25))
|
||||
|
||||
declare module "assert" {
|
||||
>"assert" : Symbol("assert", Decl(node.d.ts, 0, 50))
|
||||
|
||||
export function equal(actual: any, expected: any, message?: string | Error): void;
|
||||
>equal : Symbol(equal, Decl(node.d.ts, 2, 25))
|
||||
>actual : Symbol(actual, Decl(node.d.ts, 3, 26))
|
||||
>expected : Symbol(expected, Decl(node.d.ts, 3, 38))
|
||||
>message : Symbol(message, Decl(node.d.ts, 3, 53))
|
||||
>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/ns.ts ===
|
||||
/// <reference path="node.d.ts"/>
|
||||
namespace myAssert {
|
||||
>myAssert : Symbol(myAssert, Decl(ns.ts, 0, 0), Decl(ns.ts, 4, 3))
|
||||
|
||||
export type cool = 'cool'
|
||||
>cool : Symbol(cool, Decl(ns.ts, 1, 20))
|
||||
}
|
||||
var myAssert = require('assert')
|
||||
>myAssert : Symbol(myAssert, Decl(ns.ts, 0, 0), Decl(ns.ts, 4, 3))
|
||||
>require : Symbol(require, Decl(node.d.ts, 0, 0))
|
||||
|
||||
=== tests/cases/compiler/app.js ===
|
||||
exports.equal = myAssert.equal
|
||||
>exports.equal : Symbol(equal, Decl(app.js, 0, 0))
|
||||
>exports : Symbol(equal, Decl(app.js, 0, 0))
|
||||
>equal : Symbol(equal, Decl(app.js, 0, 0))
|
||||
>myAssert : Symbol(myAssert, Decl(ns.ts, 0, 0), Decl(ns.ts, 4, 3))
|
||||
|
||||
exports.equal()
|
||||
>exports.equal : Symbol(equal, Decl(app.js, 0, 0))
|
||||
>exports : Symbol("tests/cases/compiler/app", Decl(app.js, 0, 0))
|
||||
>equal : Symbol(equal, Decl(app.js, 0, 0))
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
=== tests/cases/compiler/node.d.ts ===
|
||||
declare function require(moduleName: string): any;
|
||||
>require : (moduleName: string) => any
|
||||
>moduleName : string
|
||||
|
||||
declare module "assert" {
|
||||
>"assert" : typeof import("assert")
|
||||
|
||||
export function equal(actual: any, expected: any, message?: string | Error): void;
|
||||
>equal : (actual: any, expected: any, message?: string | Error) => void
|
||||
>actual : any
|
||||
>expected : any
|
||||
>message : string | Error
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/ns.ts ===
|
||||
/// <reference path="node.d.ts"/>
|
||||
namespace myAssert {
|
||||
export type cool = 'cool'
|
||||
>cool : "cool"
|
||||
}
|
||||
var myAssert = require('assert')
|
||||
>myAssert : any
|
||||
>require('assert') : any
|
||||
>require : (moduleName: string) => any
|
||||
>'assert' : "assert"
|
||||
|
||||
=== tests/cases/compiler/app.js ===
|
||||
exports.equal = myAssert.equal
|
||||
>exports.equal = myAssert.equal : any
|
||||
>exports.equal : error
|
||||
>exports : typeof import("tests/cases/compiler/app")
|
||||
>equal : any
|
||||
>myAssert.equal : any
|
||||
>myAssert : any
|
||||
>equal : any
|
||||
|
||||
exports.equal()
|
||||
>exports.equal() : error
|
||||
>exports.equal : error
|
||||
>exports : typeof import("tests/cases/compiler/app")
|
||||
>equal : any
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// @module: commonjs
|
||||
// @allowJs: true
|
||||
// @outDir: ./out/
|
||||
|
||||
// @filename: node.d.ts
|
||||
declare function require(moduleName: string): any;
|
||||
|
||||
declare module "assert" {
|
||||
export function equal(actual: any, expected: any, message?: string | Error): void;
|
||||
}
|
||||
|
||||
// @filename: ns.ts
|
||||
/// <reference path="node.d.ts"/>
|
||||
namespace myAssert {
|
||||
export type cool = 'cool'
|
||||
}
|
||||
var myAssert = require('assert')
|
||||
|
||||
// @filename: app.js
|
||||
exports.equal = myAssert.equal
|
||||
exports.equal()
|
||||
Reference in New Issue
Block a user