mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-03-03 09:19:49 -06:00
Merge pull request #14467 from kpreisser/fix14269
Allow the right-hand side of an 'in' expression to be of non-primitive object type
This commit is contained in:
commit
0459987673
@ -16306,7 +16306,7 @@ namespace ts {
|
||||
if (!(isTypeComparableTo(leftType, stringType) || isTypeOfKind(leftType, TypeFlags.NumberLike | TypeFlags.ESSymbol))) {
|
||||
error(left, Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
|
||||
}
|
||||
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeVariable)) {
|
||||
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeVariable | TypeFlags.NonPrimitive)) {
|
||||
error(right, Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
|
||||
}
|
||||
return booleanType;
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
//// [nonPrimitiveRhsSideOfInExpression.ts]
|
||||
let o: object = {};
|
||||
|
||||
function f(): object {
|
||||
return {};
|
||||
}
|
||||
|
||||
const b1 = "foo" in o;
|
||||
const b2 = "bar" in f();
|
||||
|
||||
//// [nonPrimitiveRhsSideOfInExpression.js]
|
||||
var o = {};
|
||||
function f() {
|
||||
return {};
|
||||
}
|
||||
var b1 = "foo" in o;
|
||||
var b2 = "bar" in f();
|
||||
@ -0,0 +1,18 @@
|
||||
=== tests/cases/conformance/types/nonPrimitive/nonPrimitiveRhsSideOfInExpression.ts ===
|
||||
let o: object = {};
|
||||
>o : Symbol(o, Decl(nonPrimitiveRhsSideOfInExpression.ts, 0, 3))
|
||||
|
||||
function f(): object {
|
||||
>f : Symbol(f, Decl(nonPrimitiveRhsSideOfInExpression.ts, 0, 19))
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
const b1 = "foo" in o;
|
||||
>b1 : Symbol(b1, Decl(nonPrimitiveRhsSideOfInExpression.ts, 6, 5))
|
||||
>o : Symbol(o, Decl(nonPrimitiveRhsSideOfInExpression.ts, 0, 3))
|
||||
|
||||
const b2 = "bar" in f();
|
||||
>b2 : Symbol(b2, Decl(nonPrimitiveRhsSideOfInExpression.ts, 7, 5))
|
||||
>f : Symbol(f, Decl(nonPrimitiveRhsSideOfInExpression.ts, 0, 19))
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
=== tests/cases/conformance/types/nonPrimitive/nonPrimitiveRhsSideOfInExpression.ts ===
|
||||
let o: object = {};
|
||||
>o : object
|
||||
>{} : {}
|
||||
|
||||
function f(): object {
|
||||
>f : () => object
|
||||
|
||||
return {};
|
||||
>{} : {}
|
||||
}
|
||||
|
||||
const b1 = "foo" in o;
|
||||
>b1 : boolean
|
||||
>"foo" in o : boolean
|
||||
>"foo" : "foo"
|
||||
>o : object
|
||||
|
||||
const b2 = "bar" in f();
|
||||
>b2 : boolean
|
||||
>"bar" in f() : boolean
|
||||
>"bar" : "bar"
|
||||
>f() : object
|
||||
>f : () => object
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
let o: object = {};
|
||||
|
||||
function f(): object {
|
||||
return {};
|
||||
}
|
||||
|
||||
const b1 = "foo" in o;
|
||||
const b2 = "bar" in f();
|
||||
Loading…
x
Reference in New Issue
Block a user