mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
fix(44693): emit declaration of JSDoc overridden properties with different types (#46797)
This commit is contained in:
@@ -39083,7 +39083,7 @@ namespace ts {
|
||||
const properties = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType));
|
||||
for (const prop of properties) {
|
||||
const existing = seen.get(prop.escapedName);
|
||||
if (existing && !isPropertyIdenticalTo(existing, prop)) {
|
||||
if (existing && prop.parent === existing.parent) {
|
||||
seen.delete(prop.escapedName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
//// [a.js]
|
||||
/**
|
||||
* @typedef A
|
||||
* @property {string} a
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef B
|
||||
* @property {number} b
|
||||
*/
|
||||
|
||||
class C1 {
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
|
||||
class C2 extends C1 {
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
|
||||
class C3 extends C1 {
|
||||
/**
|
||||
* @type {A & B}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//// [a.d.ts]
|
||||
/**
|
||||
* @typedef A
|
||||
* @property {string} a
|
||||
*/
|
||||
/**
|
||||
* @typedef B
|
||||
* @property {number} b
|
||||
*/
|
||||
declare class C1 {
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value: A;
|
||||
}
|
||||
declare class C2 extends C1 {
|
||||
}
|
||||
declare class C3 extends C1 {
|
||||
/**
|
||||
* @type {A & B}
|
||||
*/
|
||||
value: A & B;
|
||||
}
|
||||
type A = {
|
||||
a: string;
|
||||
};
|
||||
type B = {
|
||||
b: number;
|
||||
};
|
||||
@@ -0,0 +1,43 @@
|
||||
=== tests/cases/compiler/a.js ===
|
||||
/**
|
||||
* @typedef A
|
||||
* @property {string} a
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef B
|
||||
* @property {number} b
|
||||
*/
|
||||
|
||||
class C1 {
|
||||
>C1 : Symbol(C1, Decl(a.js, 0, 0))
|
||||
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
>value : Symbol(C1.value, Decl(a.js, 10, 11))
|
||||
}
|
||||
|
||||
class C2 extends C1 {
|
||||
>C2 : Symbol(C2, Decl(a.js, 15, 1))
|
||||
>C1 : Symbol(C1, Decl(a.js, 0, 0))
|
||||
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
>value : Symbol(C2.value, Decl(a.js, 17, 21))
|
||||
}
|
||||
|
||||
class C3 extends C1 {
|
||||
>C3 : Symbol(C3, Decl(a.js, 22, 1))
|
||||
>C1 : Symbol(C1, Decl(a.js, 0, 0))
|
||||
|
||||
/**
|
||||
* @type {A & B}
|
||||
*/
|
||||
value;
|
||||
>value : Symbol(C3.value, Decl(a.js, 24, 21))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
=== tests/cases/compiler/a.js ===
|
||||
/**
|
||||
* @typedef A
|
||||
* @property {string} a
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef B
|
||||
* @property {number} b
|
||||
*/
|
||||
|
||||
class C1 {
|
||||
>C1 : C1
|
||||
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
>value : A
|
||||
}
|
||||
|
||||
class C2 extends C1 {
|
||||
>C2 : C2
|
||||
>C1 : C1
|
||||
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
>value : A
|
||||
}
|
||||
|
||||
class C3 extends C1 {
|
||||
>C3 : C3
|
||||
>C1 : C1
|
||||
|
||||
/**
|
||||
* @type {A & B}
|
||||
*/
|
||||
value;
|
||||
>value : A & B
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
// @checkJs: true
|
||||
// @allowJs: true
|
||||
// @declaration: true
|
||||
// @emitDeclarationOnly: true
|
||||
// @outDir: ./dist
|
||||
// @filename: a.js
|
||||
|
||||
/**
|
||||
* @typedef A
|
||||
* @property {string} a
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef B
|
||||
* @property {number} b
|
||||
*/
|
||||
|
||||
class C1 {
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
|
||||
class C2 extends C1 {
|
||||
/**
|
||||
* @type {A}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
|
||||
class C3 extends C1 {
|
||||
/**
|
||||
* @type {A & B}
|
||||
*/
|
||||
value;
|
||||
}
|
||||
Reference in New Issue
Block a user