# Only ``as T`` syntax is supported for type casts Rule ``arkts-as-casts`` **Severity: error** ArkTS supports the keyword ``as`` as the only syntax for type casts. Incorrect cast causes a compile-time error or runtime ``ClassCastError``. ```` syntax for type casts is not supported. Use the expression ``new ...`` instead of ``as`` if a **primitive** type (e.g., a ``number`` or a ``boolean``) must be cast to the reference type. ## TypeScript ``` class Shape {} class Circle extends Shape {x: number = 5} class Square extends Shape {y: string = "a"} function createShape(): Shape { return new Circle() } let c1 = createShape() let c2 = createShape() as Circle // No report is provided during compilation // nor during runtime if cast is wrong: let c3 = createShape() as Square console.log(c3.y) // undefined // Important corner case for casting primitives to the boxed counterparts: // The left operand is not properly boxed here in in runtime // because "as" has no runtime effect in TypeScript let e1 = (5.0 as Number) instanceof Number // false // Number object is created and instanceof works as expected: let e2 = (new Number(5.0)) instanceof Number // true ``` ## ArkTS ``` class Shape {} class Circle extends Shape {x: number = 5} class Square extends Shape {y: string = "a"} function createShape(): Shape { return new Circle() } let c2 = createShape() as Circle // ClassCastError during runtime is thrown: let c3 = createShape() as Square // Number object is created and instanceof works as expected: let e2 = (new Number(5.0)) instanceof Number // true ```