HarmonyOS鸿蒙Next ArkTS中可以考虑支持一下ts中类型推断语法(is)吗

HarmonyOS鸿蒙Next ArkTS中可以考虑支持一下ts中类型推断语法(is)吗

export function isNil<T>(value: T | undefined | null): value is undefined | null {
  return value === null || value === undefined;
}
// Type guarding is supported with "instanceof" and "as" (arkts-no-is) <ArkTSCheck>

这对调用该函数的代码进行类型推断会很有帮助,否则调用处还是需要使用as手动进行类型推断,我现在似乎只能用下面的写法,或者有更好的办法吗,可以分享一下

export function isNil<T>(value: T | undefined | null) {
  return value === null || value === undefined;
}

// 实际调用该方法的位置

if (!isNil(obj)) {
  let result = (obj as MyClass).foo(param);
  ...
}

更多关于HarmonyOS鸿蒙Next ArkTS中可以考虑支持一下ts中类型推断语法(is)吗的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

ArkTS在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升代码健壮性,并实现更好的程序执行稳定性和性能。对比标准TS的差异可以参考从TypeScript到ArkTS的适配规则。ArkTS同时也支持与TS/JavaScript(简称JS)高效互操作。ArkTS相对于TS的变更主要包括如下方面:

更多关于HarmonyOS鸿蒙Next ArkTS中可以考虑支持一下ts中类型推断语法(is)吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ArkTS要求所有类型必须在编译期确定,禁止任何可能引入运行时类型判断的语法

is类型谓词需要运行时类型检查机制支持,这与ArkTS限制运行时动态特性的原则相冲突

所以可能不会考虑

避免封装isNil函数,改用===操作符判断:

if (obj !== null && obj !== undefined) {

  let result = obj.foo(param); // 类型自动推断为MyClass

}

若必须封装工具函数,要标注参数类型:

export function isNil<T>(value: T | null | undefined): boolean {

  return value === null || value === undefined;

}

在HarmonyOS鸿蒙Next中,ArkTS目前暂不支持TypeScript的is类型推断语法。ArkTS基于TypeScript,但针对鸿蒙生态进行了定制和优化,部分高级TypeScript特性可能受限。类型检查主要依赖编译时静态分析,现有机制可通过类型守卫或泛型实现类似功能。具体语法支持需关注官方SDK更新日志。

目前HarmonyOS Next的ArkTS编译器暂不支持TypeScript的is类型谓词语法。根据您提供的代码片段,编译器会提示arkts-no-is错误,这是ArkTS对TS语法的限制。

当前推荐的替代方案是使用instanceof进行类型检查,或者通过as进行显式类型断言。对于您提到的isNil场景,建议保持函数返回boolean类型,在调用处结合typeofinstanceof进行类型判断:

if (obj !== null && obj !== undefined) {
  let result = (obj as MyClass).foo(param);
}

这样既能保持类型安全,又符合ArkTS当前的语法规范。我们会将is类型谓词的需求反馈给开发团队,未来版本可能会考虑支持。

回到顶部