== Why is this an issue?

TypeScript provides two ways to tell the compiler that a literal value should be typed as a literal type like `42` rather than the primitive one `number`:

* `as const` tells TypeScript to infer the literal type automatically
* `as T` where `T` denotes a literal type to instruct TypeScript to infer the literal type explicitly

In practice, `as const` is preferred because the type checker doesn't need re-typing the literal value.

Therefore, the rule flags occurrences of explicit literal types that can be replaced with an `as const` assertion.

== How to fix it

Replace the explicit literal type assertion with `as const`.

=== Code examples

==== Noncompliant code example

[source,typescript,diff-id=1,diff-type=noncompliant]
----
class Foo {
  public static foo: 42 = 42; // Noncompliant

  // ...
}
----

==== Compliant solution

[source,typescript,diff-id=1,diff-type=compliant]
----
class Foo {
  public static foo = 42 as const;

  // ...
}
----

==== Noncompliant code example

[source,typescript,diff-id=2,diff-type=noncompliant]
----
let foo = { bar: 'baz' as 'baz' };
----

==== Compliant solution

[source,typescript,diff-id=2,diff-type=compliant]
----
let foo = { bar: 'baz' as const };
----

//=== How does this work?

//=== Pitfalls

//=== Going the extra mile

== Resources

=== Documentation

* TypeScript Documentation - https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types[Literal types]

//=== Articles & blog posts
//=== Conference presentations
//=== Standards
