Skip to content

Commit 143cb7f

Browse files
Merge pull request #2538 from johanrd/issue/1116-leaking-state-ts-as-expression
[BUGFIX legacy]: `avoid-leaking-state-in-ember-objects` false positives with TypeScript type assertions
2 parents 0e6f5ce + 0a0b8c2 commit 143cb7f

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

lib/rules/avoid-leaking-state-in-ember-objects.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ function isAllowedLogicalExpression(value) {
2828
}
2929

3030
function isAllowed(value) {
31+
// Unwrap TypeScript type assertions: `x as Type` or `x satisfies Type`
32+
if (value && (value.type === 'TSAsExpression' || value.type === 'TSSatisfiesExpression')) {
33+
return isAllowed(value.expression);
34+
}
35+
3136
return (
3237
ember.isFunctionExpression(value) ||
3338
types.isLiteral(value) ||

tests/lib/rules/avoid-leaking-state-in-ember-objects.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ eslintTester.run('avoid-leaking-state-in-ember-objects', rule, {
5757
'import EmberObject from "@ember/object"; export default class MyNativeClassComponentWithAMixin extends EmberObject.extend(MyMixin) { someArrayField = []; }',
5858
{ code: 'export default Foo.extend({ someProp: [] });', options: [['someProp']] }, // With options.
5959
{ code: 'export default Foo.extend({ someProp: [], actions: {} });', options: [['someProp']] }, // With options and known Ember property.
60+
61+
// TypeScript type assertions should be unwrapped
62+
{
63+
code: 'export default Foo.extend({ someProp: undefined as string | undefined });',
64+
parser: require.resolve('@typescript-eslint/parser'),
65+
},
66+
{
67+
code: 'export default Foo.extend({ someProp: inject() as unknown as Store });',
68+
parser: require.resolve('@typescript-eslint/parser'),
69+
},
6070
],
6171
invalid: [
6272
{

0 commit comments

Comments
 (0)