在ts中能用的一些方式转成ets没办法使用了。demo如下:
class Table {}
class ATable extends Table {}
class BTable extends Table {}
class CTable extends Table {}
export default class DataBase {
private static readonly tableMap = new Map<Function, Table>()
private static readonly tableTypes = [ATable, BTable, CTable]
static getTable<T extends Table>(tableClass: new () => T): T {
if (!DataBase.tableMap.has(tableClass)) {
DataBase.tableMap.set(tableClass, new tableClass());
}
return DataBase.tableMap.get(tableClass) as T
}
static getTable2<T extends Table>(this: new () => T): T {
if (!DataBase.tableMap.has(this)) {
DataBase.tableMap.set(this, new this());
}
return DataBase.tableMap.get(this) as T
}
static init() {
for (let tableType of this.tableTypes) {
this.getTable(tableType)
}
}
static testCase() {
const t1 = this.getTable(ATable)
const t2 = this.getTable2<ATable>()
console.log("equals : " + (t1 === t2))
}
}
1.ArkTS中禁止使用any类型
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5\#使用具体的类型而非any或unknown
2.ArkTS不支持this类型,改用显式具体类型。
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5\#不支持this类型
您可以参考文档 从TypeScript到ArkTS的适配规则:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5