Skip to content

Commit a8bea77

Browse files
authored
Backfill TypeReference.typeArguments in the API (#33714)
1 parent 08aaf6a commit a8bea77

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

src/services/services.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,15 @@ namespace ts {
452452
isClass(): this is InterfaceType {
453453
return !!(getObjectFlags(this) & ObjectFlags.Class);
454454
}
455+
/**
456+
* This polyfills `referenceType.typeArguments` for API consumers
457+
*/
458+
get typeArguments() {
459+
if (getObjectFlags(this) & ObjectFlags.Reference) {
460+
return this.checker.getTypeArguments(this as Type as TypeReference);
461+
}
462+
return undefined;
463+
}
455464
}
456465

457466
class SignatureObject implements Signature {

src/services/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ namespace ts {
6868
isClass(): this is InterfaceType;
6969
}
7070

71+
export interface TypeReference {
72+
typeArguments?: readonly Type[];
73+
}
74+
7175
export interface Signature {
7276
getDeclaration(): SignatureDeclaration;
7377
getTypeParameters(): TypeParameter[] | undefined;

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4902,6 +4902,9 @@ declare namespace ts {
49024902
isClassOrInterface(): this is InterfaceType;
49034903
isClass(): this is InterfaceType;
49044904
}
4905+
interface TypeReference {
4906+
typeArguments?: readonly Type[];
4907+
}
49054908
interface Signature {
49064909
getDeclaration(): SignatureDeclaration;
49074910
getTypeParameters(): TypeParameter[] | undefined;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4902,6 +4902,9 @@ declare namespace ts {
49024902
isClassOrInterface(): this is InterfaceType;
49034903
isClass(): this is InterfaceType;
49044904
}
4905+
interface TypeReference {
4906+
typeArguments?: readonly Type[];
4907+
}
49054908
interface Signature {
49064909
getDeclaration(): SignatureDeclaration;
49074910
getTypeParameters(): TypeParameter[] | undefined;

0 commit comments

Comments
 (0)