mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-05 16:54:54 -05:00
Merge pull request #15910 from Microsoft/primitives
getAllPossiblePropertiesOfTypes: Skip primitives
This commit is contained in:
@@ -5794,6 +5794,10 @@ namespace ts {
|
||||
if (type.flags & TypeFlags.Union) {
|
||||
const props = createMap<Symbol>();
|
||||
for (const memberType of (type as UnionType).types) {
|
||||
if (memberType.flags & TypeFlags.Primitive) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const { name } of getPropertiesOfType(memberType)) {
|
||||
if (!props.has(name)) {
|
||||
props.set(name, createUnionOrIntersectionProperty(type as UnionType, name));
|
||||
|
||||
@@ -2587,6 +2587,7 @@ namespace ts {
|
||||
/**
|
||||
* For a union, will include a property if it's defined in *any* of the member types.
|
||||
* So for `{ a } | { b }`, this will include both `a` and `b`.
|
||||
* Does not include properties of primitive types.
|
||||
*/
|
||||
/* @internal */ getAllPossiblePropertiesOfType(type: Type): Symbol[];
|
||||
}
|
||||
|
||||
@@ -2,17 +2,19 @@
|
||||
|
||||
// @strictNullChecks: true
|
||||
|
||||
// Non-objects should be skipped, so `| number | null` should have no effect on completions.
|
||||
////const x: { a: number, b: number } | { a: string, c: string } | { b: boolean } | number | null = { /*x*/ };
|
||||
// Primitives should be skipped, so `| number | null | undefined` should have no effect on completions.
|
||||
////const x: { a: number, b: number } | { a: string, c: string } | { b: boolean } | number | null | undefined = { /*x*/ };
|
||||
|
||||
////interface I { a: number; }
|
||||
////function f(...args: Array<I | I[]>) {}
|
||||
////f({ /*f*/ });
|
||||
|
||||
goTo.marker("x");
|
||||
verify.completionListCount(3);
|
||||
verify.completionListContains("a", "(property) a: string | number");
|
||||
verify.completionListContains("b", "(property) b: number | boolean");
|
||||
verify.completionListContains("c", "(property) c: string");
|
||||
|
||||
goTo.marker("f");
|
||||
verify.completionListContains("a", "(property) a: number");
|
||||
// Also contains array members
|
||||
|
||||
Reference in New Issue
Block a user