Rule: no-object-literal-type-assertion

Forbids an object literal to appear in a type assertion expression. Casting to any or to unknown is still allowed.


Always prefer const x: T = { ... }; to const x = { ... } as T;. The type assertion in the latter case is either unnecessary or hides an error. The compiler will warn for excess properties with this syntax, but not missing required fields. For example: const x: { foo: number } = {} will fail to compile, but const x = {} as { foo: number } will succeed. Additionally, the const assertion const x = { foo: 1 } as const, introduced in TypeScript 3.4, is considered beneficial and is ignored by this rule.

TS Only


One option may be configured:

  • allow-arguments allows type assertions to be used on object literals inside call expressions.
Config examples
"no-object-literal-type-assertion": true
"no-object-literal-type-assertion": [true, {"allow-arguments": true}]
  "type": "object",
  "properties": {
    "allow-arguments": {
      "type": "boolean"
  "additionalProperties": false

Code examples:

Disallow object literals to appear in type assertion expressions (default). Casting to `any` and `unknown` is allowed.
"rules": { "no-object-literal-type-assertion": true }
let foo = {} as any;
let foo = {} as unknown;

let foo = {} as any as Foo;
let foo = {} as unknown as Foo;
let foo = {} as Foo;
let foo = <Foo>{};
Allow using a type assertion when the object literal is used as an argument.
"rules": { "no-object-literal-type-assertion": [true, { "allow-arguments": true }] }
bar({} as Foo)