mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 04:43:37 -05:00
getPropertiesOfUnionOrIntersectionType: handle types with index signature (#31979)
* getPropertiesOfUnionOrIntersectionType: handle types with index signature Fixes: #31565 * fix test * more testing * fix typo in checker.ts Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>
This commit is contained in:
@@ -9842,8 +9842,8 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
// The properties of a union type are those that are present in all constituent types, so
|
||||
// we only need to check the properties of the first type
|
||||
if (type.flags & TypeFlags.Union) {
|
||||
// we only need to check the properties of the first type without index signature
|
||||
if (type.flags & TypeFlags.Union && !getIndexInfoOfType(current, IndexKind.String) && !getIndexInfoOfType(current, IndexKind.Number)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(24,5): error TS23
|
||||
Type 'keyof B' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
Type 'string | number | symbol' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
Type 'string' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
Type 'keyof B' is not assignable to type '"valueOf"'.
|
||||
Type 'string | number | symbol' is not assignable to type '"valueOf"'.
|
||||
Type 'string' is not assignable to type '"valueOf"'.
|
||||
Type 'keyof B' is not assignable to type 'number'.
|
||||
Type 'string | number | symbol' is not assignable to type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/conditional/conditionalTypes2.ts(25,5): error TS2322: Type 'Invariant<A>' is not assignable to type 'Invariant<B>'.
|
||||
Types of property 'foo' are incompatible.
|
||||
Type 'A extends string ? keyof A : A' is not assignable to type 'B extends string ? keyof B : B'.
|
||||
@@ -77,9 +77,9 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(75,12): error TS2
|
||||
!!! error TS2322: Type 'keyof B' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
!!! error TS2322: Type 'string' is not assignable to type 'number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "length" | "substr" | "valueOf"'.
|
||||
!!! error TS2322: Type 'keyof B' is not assignable to type '"valueOf"'.
|
||||
!!! error TS2322: Type 'string | number | symbol' is not assignable to type '"valueOf"'.
|
||||
!!! error TS2322: Type 'string' is not assignable to type '"valueOf"'.
|
||||
!!! error TS2322: Type 'keyof B' is not assignable to type 'number'.
|
||||
!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'number'.
|
||||
!!! error TS2322: Type 'string' is not assignable to type 'number'.
|
||||
b = a; // Error
|
||||
~
|
||||
!!! error TS2322: Type 'Invariant<A>' is not assignable to type 'Invariant<B>'.
|
||||
|
||||
@@ -3,21 +3,30 @@
|
||||
////interface One {
|
||||
//// commonProperty: string;
|
||||
//// commonFunction(): number;
|
||||
//// anotherProperty: Record<string, number>;
|
||||
////}
|
||||
////
|
||||
////interface Two {
|
||||
//// commonProperty: number;
|
||||
//// commonFunction(): number;
|
||||
//// anotherProperty: { foo: number }
|
||||
////}
|
||||
////
|
||||
////var x : One | Two;
|
||||
////
|
||||
////x.commonProperty./**/
|
||||
////x.commonProperty./*1*/;
|
||||
////x.anotherProperty./*2*/;
|
||||
|
||||
verify.completions({
|
||||
marker: "",
|
||||
marker: "1",
|
||||
exact: [
|
||||
{ name: "toString", text: "(method) toString(): string (+1 overload)", documentation: "Returns a string representation of a string.", },
|
||||
{ name: "toString", text: "(method) toString(): string (+1 overload)", documentation: "Returns a string representation of a string." },
|
||||
{ name: "valueOf", text: "(method) valueOf(): string | number", documentation: "Returns the primitive value of the specified object." },
|
||||
{ name: "toLocaleString", text: "(method) toLocaleString(): string (+1 overload)", documentation: "Returns a date converted to a string using the current locale." },
|
||||
],
|
||||
});
|
||||
|
||||
verify.completions({
|
||||
marker: '2',
|
||||
includes: { name: 'foo' }
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user