Adaptation Rules from TypeScript to ArkTS (4)
ArkTS Constraints on TypeScript Features No Support for Conditional Types Rule: arkts-no-conditional-types Severity: Error Description: ArkTS does not support conditional type aliases. Introduce new types with explicit constraints or rewrite logic using Object. TypeScript Example: type X = T extends number ? T : never; type Y = T extends Array ? Item : never; ArkTS Example: // Provide explicit constraints in type aliases type X1 = T; // Rewrite with Object, with less type control and a need for more type checks type X2 = Object; // Item must be used as a generic parameter and correctly instantiable type YI = Item; No Support for Field Declarations in Constructors Rule: arkts-no-ctor-prop-decls Severity: Error Description: ArkTS does not support declaring class fields within constructors. Declare these fields within the class. TypeScript Example: class Person { constructor( protected ssn: string, private firstName: string, private lastName: string ) { this.ssn = ssn; this.firstName = firstName; this.lastName = lastName; } getFullName(): string { return this.firstName + ' ' + this.lastName; } } ArkTS Example: class Person { protected ssn: string; private firstName: string; private lastName: string; constructor(ssn: string, firstName: string, lastName: string) { this.ssn = ssn; this.firstName = firstName; this.lastName = lastName; } getFullName(): string { return this.firstName + ' ' + this.lastName; } } No Support for Constructor Signatures in Interfaces Rule: arkts-no-ctor-signatures-iface Severity: Error Description: ArkTS does not support constructor signatures in interfaces. Use functions or methods instead. TypeScript Example: interface I { new (s: string): I; } function fn(i: I) { return new i('hello'); } ArkTS Example: interface I { create(s: string): I; } function fn(i: I) { return i.create('hello'); } No Support for Index Access Types Rule: arkts-no-aliases-by-index Severity: Error Description: ArkTS does not support index access types. No Support for Field Access by Index Rule: arkts-no-props-by-index Severity: Error Description: ArkTS does not support dynamic field declaration or access. You can only access fields declared in the class or inherited visible fields. Accessing other fields will result in a compile - time error. TypeScript Example: class Point { x: string = ''; y: string = ''; } let p: Point = { x: '1', y: '2' }; console.log(p['x']); class Person { name: string = ''; age: number = 0; [key: string]: string | number; } let person: Person = { name: 'John', age: 30, email: '***@example.com', phoneNumber: '18*********', }; ArkTS Example: class Point { x: string = ''; y: string = ''; } let p: Point = { x: '1', y: '2' }; console.log(p.x); class Person { name: string; age: number; email: string; phoneNumber: string; constructor(name: string, age: number, email: string, phoneNumber: string) { this.name = name; this.age = age; this.email = email; this.phoneNumber = phoneNumber; } } let person = new Person('John', 30, '***@example.com', '18*********'); console.log(person['name']); // Compile - time error console.log(person.unknownProperty); // Compile - time error let arr = new Int32Array(1); arr[0];

ArkTS Constraints on TypeScript Features
No Support for Conditional Types
- Rule: arkts-no-conditional-types
-
Severity: Error
- Description: ArkTS does not support conditional type aliases. Introduce new types with explicit constraints or rewrite logic using Object.
- TypeScript Example:
type X<T> = T extends number ? T : never;
type Y<T> = T extends Array<infer Item> ? Item : never;
- ArkTS Example:
// Provide explicit constraints in type aliases
type X1<T extends number> = T;
// Rewrite with Object, with less type control and a need for more type checks
type X2<T> = Object;
// Item must be used as a generic parameter and correctly instantiable
type YI<Item, T extends Array<Item>> = Item;
No Support for Field Declarations in Constructors
- Rule: arkts-no-ctor-prop-decls
-
Severity: Error
- Description: ArkTS does not support declaring class fields within constructors. Declare these fields within the class.
- TypeScript Example:
class Person {
constructor(
protected ssn: string,
private firstName: string,
private lastName: string
) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return this.firstName + ' ' + this.lastName;
}
}
- ArkTS Example:
class Person {
protected ssn: string;
private firstName: string;
private lastName: string;
constructor(ssn: string, firstName: string, lastName: string) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return this.firstName + ' ' + this.lastName;
}
}
No Support for Constructor Signatures in Interfaces
- Rule: arkts-no-ctor-signatures-iface
-
Severity: Error
- Description: ArkTS does not support constructor signatures in interfaces. Use functions or methods instead.
- TypeScript Example:
interface I {
new (s: string): I;
}
function fn(i: I) {
return new i('hello');
}
- ArkTS Example:
interface I {
create(s: string): I;
}
function fn(i: I) {
return i.create('hello');
}
No Support for Index Access Types
- Rule: arkts-no-aliases-by-index
-
Severity: Error
- Description: ArkTS does not support index access types.
No Support for Field Access by Index
- Rule: arkts-no-props-by-index
-
Severity: Error
- Description: ArkTS does not support dynamic field declaration or access. You can only access fields declared in the class or inherited visible fields. Accessing other fields will result in a compile - time error.
- TypeScript Example:
class Point {
x: string = '';
y: string = '';
}
let p: Point = { x: '1', y: '2' };
console.log(p['x']);
class Person {
name: string = '';
age: number = 0;
[key: string]: string | number;
}
let person: Person = {
name: 'John',
age: 30,
email: '***@example.com',
phoneNumber: '18*********',
};
- ArkTS Example:
class Point {
x: string = '';
y: string = '';
}
let p: Point = { x: '1', y: '2' };
console.log(p.x);
class Person {
name: string;
age: number;
email: string;
phoneNumber: string;
constructor(name: string, age: number, email: string, phoneNumber: string) {
this.name = name;
this.age = age;
this.email = email;
this.phoneNumber = phoneNumber;
}
}
let person = new Person('John', 30, '***@example.com', '18*********');
console.log(person['name']); // Compile - time error
console.log(person.unknownProperty); // Compile - time error
let arr = new Int32Array(1);
arr[0];