grats icon indicating copy to clipboard operation
grats copied to clipboard

__typename must be const

Open captbaritone opened this issue 1 year ago • 5 comments

Currently we allow this, but it's not technically safe since the __typename could be mutated.

class User implements IPerson {
  __typename = "User";
}

We should require either:

class User implements IPerson {
  __typename = "User" as const;
}

or

class User implements IPerson {
  __typename: "User" = "User";
}

captbaritone avatar Mar 07 '24 04:03 captbaritone

@captbaritone can i take this ?? what all other things needs to in mind while doing this . ???

Rash-Hit avatar Mar 08 '24 14:03 Rash-Hit

@Rash-Hit Sorry I missed your message! I think all we need to do here is update the code here to expect an "AsExpression" with an expression that is the expected string literal and a type that is const (I think there's a keyword constant exported by TypeScript somewhere).

Then you should be sure to update/add test fixtures showing the "happy" path as well as demonstrating exactly what the error messages look like. You can read more here: https://github.com/captbaritone/grats/blob/2f7323fb43a31ed1895b394bbdbc01fba583cc0c/CONTRIBUTING.md#automated-tests

captbaritone avatar Mar 13 '24 04:03 captbaritone

@Rash-Hit Following up here. Are you still interested in working on this? No worries if not.

captbaritone avatar Mar 22 '24 21:03 captbaritone

i am really sorry @captbaritone , is this something we need to do ?? image

Rash-Hit avatar Mar 23 '24 19:03 Rash-Hit

@Rash-Hit Yeah, that looks about right. We probably also need to check that it's as const (look at the .identifier of the as expression. You'll also need to make sure that in the as const case you look for the literal name string as the .expression of the as expression node.

Here's what it looks like in the correct case: Screenshot 2024-03-23 at 12 22 04 PM

https://astexplorer.net/#/gist/615fac072e169328425c18cb9d88ba66/bea0aafa2f40091c2d62bf65dae3b3834d8bdf0a

captbaritone avatar Mar 23 '24 19:03 captbaritone

Closed in https://github.com/captbaritone/grats/pull/137

captbaritone avatar Aug 15 '24 23:08 captbaritone