mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-09 20:51:43 -06:00
Consider non-public literal members in index type of constrained type parameters
This commit is contained in:
parent
36aa1014f8
commit
48f74fdf80
@ -9987,8 +9987,8 @@ namespace ts {
|
||||
});
|
||||
}
|
||||
|
||||
function getLiteralTypeFromProperty(prop: Symbol, include: TypeFlags) {
|
||||
if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) {
|
||||
function getLiteralTypeFromProperty(prop: Symbol, include: TypeFlags, includeNonPublic?: boolean) {
|
||||
if (includeNonPublic || !(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) {
|
||||
let type = getLateBoundSymbol(prop).nameType;
|
||||
if (!type && !isKnownSymbol(prop)) {
|
||||
if (prop.escapedName === InternalSymbolName.Default) {
|
||||
@ -10006,8 +10006,8 @@ namespace ts {
|
||||
return neverType;
|
||||
}
|
||||
|
||||
function getLiteralTypeFromProperties(type: Type, include: TypeFlags) {
|
||||
return getUnionType(map(getPropertiesOfType(type), p => getLiteralTypeFromProperty(p, include)));
|
||||
function getLiteralTypeFromProperties(type: Type, include: TypeFlags, includeNonPublic?: boolean) {
|
||||
return getUnionType(map(getPropertiesOfType(type), p => getLiteralTypeFromProperty(p, include, includeNonPublic)));
|
||||
}
|
||||
|
||||
function getNonEnumNumberIndexInfo(type: Type) {
|
||||
@ -10023,10 +10023,10 @@ namespace ts {
|
||||
type === wildcardType ? wildcardType :
|
||||
type.flags & TypeFlags.Unknown ? neverType :
|
||||
type.flags & (TypeFlags.Any | TypeFlags.Never) ? keyofConstraintType :
|
||||
stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral) :
|
||||
!noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, TypeFlags.UniqueESSymbol)]) :
|
||||
getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) :
|
||||
getLiteralTypeFromProperties(type, TypeFlags.StringOrNumberLiteralOrUnique);
|
||||
stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral, /*includeNonPublic*/ true) :
|
||||
!noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, TypeFlags.UniqueESSymbol, /*includeNonPublic*/ true)]) :
|
||||
getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol, /*includeNonPublic*/ true)]) :
|
||||
getLiteralTypeFromProperties(type, TypeFlags.StringOrNumberLiteralOrUnique, /*includeNonPublic*/ true);
|
||||
}
|
||||
|
||||
function getExtractStringType(type: Type) {
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
//// [indexedAccessPrivateMemberOfGenericConstraint.ts]
|
||||
class A {
|
||||
private a: number;
|
||||
}
|
||||
|
||||
type B<T extends A> = T["a"];
|
||||
|
||||
|
||||
//// [indexedAccessPrivateMemberOfGenericConstraint.js]
|
||||
var A = /** @class */ (function () {
|
||||
function A() {
|
||||
}
|
||||
return A;
|
||||
}());
|
||||
@ -0,0 +1,14 @@
|
||||
=== tests/cases/compiler/indexedAccessPrivateMemberOfGenericConstraint.ts ===
|
||||
class A {
|
||||
>A : Symbol(A, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 0, 0))
|
||||
|
||||
private a: number;
|
||||
>a : Symbol(A.a, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 0, 9))
|
||||
}
|
||||
|
||||
type B<T extends A> = T["a"];
|
||||
>B : Symbol(B, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 2, 1))
|
||||
>T : Symbol(T, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 4, 7))
|
||||
>A : Symbol(A, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(indexedAccessPrivateMemberOfGenericConstraint.ts, 4, 7))
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/indexedAccessPrivateMemberOfGenericConstraint.ts ===
|
||||
class A {
|
||||
>A : A
|
||||
|
||||
private a: number;
|
||||
>a : number
|
||||
}
|
||||
|
||||
type B<T extends A> = T["a"];
|
||||
>B : T["a"]
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
class A {
|
||||
private a: number;
|
||||
}
|
||||
|
||||
type B<T extends A> = T["a"];
|
||||
Loading…
x
Reference in New Issue
Block a user