mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-15 11:35:42 -06:00
Fixed declaration emit issue related to a qualifier being reused cross-file (#58810)
This commit is contained in:
parent
56289733a4
commit
c2e48e564a
@ -8710,7 +8710,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
}
|
||||
if (isJSDocTypeLiteral(node)) {
|
||||
return factory.createTypeLiteralNode(map(node.jsDocPropertyTags, t => {
|
||||
const name = isIdentifier(t.name) ? t.name : t.name.right;
|
||||
const name = visitNode(isIdentifier(t.name) ? t.name : t.name.right, visitExistingNodeTreeSymbols, isIdentifier)!;
|
||||
const typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(context, node), name.escapedText);
|
||||
const overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(context, t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
|
||||
|
||||
@ -8749,7 +8749,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
/*modifiers*/ undefined,
|
||||
getEffectiveDotDotDotForParameter(p),
|
||||
setTextRange(context, factory.createIdentifier(getNameForJSDocFunctionParameter(p, i)), p),
|
||||
p.questionToken,
|
||||
factory.cloneNode(p.questionToken),
|
||||
visitNode(p.type, visitExistingNodeTreeSymbols, isTypeNode),
|
||||
/*initializer*/ undefined,
|
||||
)),
|
||||
@ -8764,7 +8764,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
/*modifiers*/ undefined,
|
||||
getEffectiveDotDotDotForParameter(p),
|
||||
setTextRange(context, factory.createIdentifier(getNameForJSDocFunctionParameter(p, i)), p),
|
||||
p.questionToken,
|
||||
factory.cloneNode(p.questionToken),
|
||||
visitNode(p.type, visitExistingNodeTreeSymbols, isTypeNode),
|
||||
/*initializer*/ undefined,
|
||||
)),
|
||||
@ -8782,7 +8782,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (isTypeParameterDeclaration(node)) {
|
||||
return factory.updateTypeParameterDeclaration(
|
||||
node,
|
||||
node.modifiers,
|
||||
visitNodes(node.modifiers, visitExistingNodeTreeSymbols, isModifier),
|
||||
setTextRange(context, typeParameterToName(getDeclaredTypeOfSymbol(getSymbolOfDeclaration(node)), context), node),
|
||||
visitNode(node.constraint, visitExistingNodeTreeSymbols, isTypeNode),
|
||||
visitNode(node.default, visitExistingNodeTreeSymbols, isTypeNode),
|
||||
@ -8823,8 +8823,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return factory.updateImportTypeNode(
|
||||
node,
|
||||
factory.updateLiteralTypeNode(node.argument, rewriteModuleSpecifier(node, node.argument.literal)),
|
||||
node.attributes,
|
||||
node.qualifier,
|
||||
visitNode(node.attributes, visitExistingNodeTreeSymbols, isImportAttributes),
|
||||
visitNode(node.qualifier, visitExistingNodeTreeSymbols, isEntityName),
|
||||
visitNodes(node.typeArguments, visitExistingNodeTreeSymbols, isTypeNode),
|
||||
node.isTypeOf,
|
||||
);
|
||||
@ -8903,9 +8903,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
parameterName = result;
|
||||
}
|
||||
else {
|
||||
parameterName = node.parameterName;
|
||||
parameterName = factory.cloneNode(node.parameterName);
|
||||
}
|
||||
return factory.updateTypePredicateNode(node, node.assertsModifier, parameterName, visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode));
|
||||
return factory.updateTypePredicateNode(node, factory.cloneNode(node.assertsModifier), parameterName, visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode));
|
||||
}
|
||||
|
||||
if (isTupleTypeNode(node) || isTypeLiteralNode(node) || isMappedTypeNode(node)) {
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
//// [tests/cases/compiler/declarationEmitTopLevelNodeFromCrossFile2.ts] ////
|
||||
|
||||
//// [a.ts]
|
||||
import { boxedBox } from "./boxedBox";
|
||||
|
||||
export const _ = boxedBox;
|
||||
|
||||
// At index 83
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
|
||||
//// [boxedBox.d.ts]
|
||||
export declare const boxedBox: import("./box").Box<{
|
||||
boxed: import("./box").Box<number>;
|
||||
}>; // ^This is index 83 in this file
|
||||
|
||||
//// [box.d.ts]
|
||||
export declare class Box<T> {
|
||||
value: T;
|
||||
constructor(value: T);
|
||||
}
|
||||
export declare function box<T>(value: T): Box<T>;
|
||||
|
||||
//// [a.js]
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports._ = void 0;
|
||||
var boxedBox_1 = require("./boxedBox");
|
||||
exports._ = boxedBox_1.boxedBox;
|
||||
// At index 83
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
|
||||
|
||||
//// [a.d.ts]
|
||||
export declare const _: import("./box").Box<{
|
||||
boxed: import("./box").Box<number>;
|
||||
}>;
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
@ -0,0 +1,47 @@
|
||||
//// [tests/cases/compiler/declarationEmitTopLevelNodeFromCrossFile2.ts] ////
|
||||
|
||||
=== a.ts ===
|
||||
import { boxedBox } from "./boxedBox";
|
||||
>boxedBox : Symbol(boxedBox, Decl(a.ts, 0, 8))
|
||||
|
||||
export const _ = boxedBox;
|
||||
>_ : Symbol(_, Decl(a.ts, 2, 12))
|
||||
>boxedBox : Symbol(boxedBox, Decl(a.ts, 0, 8))
|
||||
|
||||
// At index 83
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
|
||||
=== boxedBox.d.ts ===
|
||||
export declare const boxedBox: import("./box").Box<{
|
||||
>boxedBox : Symbol(boxedBox, Decl(boxedBox.d.ts, 0, 20))
|
||||
>Box : Symbol(Box, Decl(box.d.ts, 0, 0))
|
||||
|
||||
boxed: import("./box").Box<number>;
|
||||
>boxed : Symbol(boxed, Decl(boxedBox.d.ts, 0, 52))
|
||||
>Box : Symbol(Box, Decl(box.d.ts, 0, 0))
|
||||
|
||||
}>; // ^This is index 83 in this file
|
||||
|
||||
=== box.d.ts ===
|
||||
export declare class Box<T> {
|
||||
>Box : Symbol(Box, Decl(box.d.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(box.d.ts, 0, 25))
|
||||
|
||||
value: T;
|
||||
>value : Symbol(Box.value, Decl(box.d.ts, 0, 29))
|
||||
>T : Symbol(T, Decl(box.d.ts, 0, 25))
|
||||
|
||||
constructor(value: T);
|
||||
>value : Symbol(value, Decl(box.d.ts, 2, 16))
|
||||
>T : Symbol(T, Decl(box.d.ts, 0, 25))
|
||||
}
|
||||
export declare function box<T>(value: T): Box<T>;
|
||||
>box : Symbol(box, Decl(box.d.ts, 3, 1))
|
||||
>T : Symbol(T, Decl(box.d.ts, 4, 28))
|
||||
>value : Symbol(value, Decl(box.d.ts, 4, 31))
|
||||
>T : Symbol(T, Decl(box.d.ts, 4, 28))
|
||||
>Box : Symbol(Box, Decl(box.d.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(box.d.ts, 4, 28))
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
//// [tests/cases/compiler/declarationEmitTopLevelNodeFromCrossFile2.ts] ////
|
||||
|
||||
=== a.ts ===
|
||||
import { boxedBox } from "./boxedBox";
|
||||
>boxedBox : import("box").Box<{ boxed: import("box").Box<number>; }>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
|
||||
|
||||
export const _ = boxedBox;
|
||||
>_ : import("box").Box<{ boxed: import("box").Box<number>; }>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
|
||||
>boxedBox : import("box").Box<{ boxed: import("box").Box<number>; }>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
|
||||
|
||||
// At index 83
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
|
||||
=== boxedBox.d.ts ===
|
||||
export declare const boxedBox: import("./box").Box<{
|
||||
>boxedBox : import("box").Box<{ boxed: import("./box").Box<number>; }>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
|
||||
|
||||
boxed: import("./box").Box<number>;
|
||||
>boxed : import("box").Box<number>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
}>; // ^This is index 83 in this file
|
||||
|
||||
=== box.d.ts ===
|
||||
export declare class Box<T> {
|
||||
>Box : Box<T>
|
||||
> : ^^^^^^
|
||||
|
||||
value: T;
|
||||
>value : T
|
||||
> : ^
|
||||
|
||||
constructor(value: T);
|
||||
>value : T
|
||||
> : ^
|
||||
}
|
||||
export declare function box<T>(value: T): Box<T>;
|
||||
>box : <T>(value: T) => Box<T>
|
||||
> : ^ ^^ ^^ ^^^^^
|
||||
>value : T
|
||||
> : ^
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
// @strict: true
|
||||
// @declaration: true
|
||||
|
||||
// @filename: a.ts
|
||||
import { boxedBox } from "./boxedBox";
|
||||
|
||||
export const _ = boxedBox;
|
||||
|
||||
// At index 83
|
||||
/**
|
||||
* wat
|
||||
*/
|
||||
|
||||
// @filename: boxedBox.d.ts
|
||||
export declare const boxedBox: import("./box").Box<{
|
||||
boxed: import("./box").Box<number>;
|
||||
}>; // ^This is index 83 in this file
|
||||
|
||||
// @filename: box.d.ts
|
||||
export declare class Box<T> {
|
||||
value: T;
|
||||
constructor(value: T);
|
||||
}
|
||||
export declare function box<T>(value: T): Box<T>;
|
||||
Loading…
x
Reference in New Issue
Block a user