diff --git a/ets2panda/linter/src/lib/utils/TsUtils.ts b/ets2panda/linter/src/lib/utils/TsUtils.ts index 7aa8050e888d46cb3c8a07b147c275ea479bc997..3395d32594540e75005beb8ba4593ecbf30bb8cc 100644 --- a/ets2panda/linter/src/lib/utils/TsUtils.ts +++ b/ets2panda/linter/src/lib/utils/TsUtils.ts @@ -824,18 +824,22 @@ export class TsUtils { isStrict: boolean = false ): boolean { if ( - TsUtils.reduceReference(lhsType) === TsUtils.reduceReference(rhsType) && - TsUtils.isTypeReference(lhsType) && - TsUtils.isTypeReference(rhsType) + TsUtils.reduceReference(lhsType) !== TsUtils.reduceReference(rhsType) || + !TsUtils.isTypeReference(lhsType) || + !TsUtils.isTypeReference(rhsType) ) { - const lhsArgs = lhsType.typeArguments; - const rhsArgs = rhsType.typeArguments; - if (lhsArgs && lhsArgs.length > 0) { - if (rhsArgs && rhsArgs.length > 0) { - return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsArgs[0], rhsExpr, isStrict); + return false; + } + const lhsArgs = lhsType.typeArguments; + const rhsArgs = rhsType.typeArguments; + if (lhsArgs && lhsArgs.length > 0) { + if (rhsArgs && rhsArgs.length > 0) { + if (rhsArgs[0] === lhsArgs[0]) { + return false; } - return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsType, rhsExpr, isStrict); + return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsArgs[0], rhsExpr, isStrict); } + return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsType, rhsExpr, isStrict); } return false; } diff --git a/ets2panda/linter/test/builtin/builtin_thisArgs.ets b/ets2panda/linter/test/builtin/builtin_thisArgs.ets index 2a73669055134cc6b5b85d4c122a6da9a8e27bfb..b296e847c11bc4be6bf9ca82359bef48fc1b08f3 100755 --- a/ets2panda/linter/test/builtin/builtin_thisArgs.ets +++ b/ets2panda/linter/test/builtin/builtin_thisArgs.ets @@ -28,4 +28,12 @@ let a = new MyClass(2); let b = new MyClass(3); arr.filter(a.compare, a); arr.filter(a.compare); -arr.filter(a.compare, b); \ No newline at end of file +arr.filter(a.compare, b); + +type T = number | T[]; +let arr: ReadonlyArray = [[1.0, 2.0], 3.0, [4.0, 5.0]]; +arr.flatMap( + (value, index, array) => { + return value; + } +); \ No newline at end of file