Fix bug: result of createUnionOrIntersectionProperty may be undefined (#21332)

This commit is contained in:
Andy 2018-01-22 10:15:57 -08:00 committed by GitHub
parent a3ecfd857c
commit 588716926d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 3 deletions

View File

@ -5995,7 +5995,9 @@ namespace ts {
for (const memberType of types) {
for (const { escapedName } of getAugmentedPropertiesOfType(memberType)) {
if (!props.has(escapedName)) {
props.set(escapedName, createUnionOrIntersectionProperty(unionType as UnionType, escapedName));
const prop = createUnionOrIntersectionProperty(unionType as UnionType, escapedName);
// May be undefined if the property is private
if (prop) props.set(escapedName, prop);
}
}
}
@ -6177,7 +6179,7 @@ namespace ts {
t;
}
function createUnionOrIntersectionProperty(containingType: UnionOrIntersectionType, name: __String): Symbol {
function createUnionOrIntersectionProperty(containingType: UnionOrIntersectionType, name: __String): Symbol | undefined {
let props: Symbol[];
const isUnion = containingType.flags & TypeFlags.Union;
const excludeModifiers = isUnion ? ModifierFlags.NonPublicAccessibilityModifier : 0;

View File

@ -2,7 +2,9 @@
////interface I { x: number; }
////interface Many<T> extends ReadonlyArray<T> { extra: number; }
////const x: I | I[] | Many<string> = { /**/ };
////class C { private priv: number; }
////const x: I | I[] | Many<string> | C = { /**/ };
// We specifically filter out any array-like types.
// Private members will be excluded by `createUnionOrIntersectionProperty`.
verify.completionsAt("", ["x"]);