1.在使用系统的一些框架获取信息时,有的获取不到
(1)bundleManager 获取verson 信息
import { bundleManager } from '@kit.AbilityKit';
bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{
let versionName = bundleInfo.versionName;//App version name
let versionNo = bundleInfo.versionCode;//App version code
}).catch((error: BusinessError )=>{
console.error("get bundleInfo failed,error is "+error)
})
获取到的都是空字符,报错:
The getBundleInfoForSelf interface in the previewer is a mocked implementation and may behave differently than on a real device.
(2)获取随机的uuid
let uuid = util.generateRandomUUID(true);
console.info("RFC 4122 Version 4 UUID:" + uuid);
获取到的都是空字符,报错:
The generateRandomUUID interface in the previewer is a mocked implementation and may behave differently than on a real device.
2.定义Map,value值既有string类型,又有map类型
在ArkTs中我们需要明确具体的类型,不然会报错
let map = new Map<string,any>()
报错 Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>
可以这样:
let map = new Map<string,string | Map<string,string>>()
这样value既可以是string 也可以是Map
3.在类方法中不可以使用类定义的属性
使用报错:
Using "this" inside stand-alone functions is not supported (arkts-no-standalone-this) <ArkTSCheck>
4.页面中像素大小
px 物理像素 精确像素级控制(慎用)1vp ≈ px / (DPI/160)
fp 字体像素 文字大小默认1fp=1vp,受系统字体缩放影响
lpx 视窗逻辑像素响应式布局(比例适配)与屏幕宽度和designWidth相关
% 百分比相对父容器尺寸无直接换算关系
vp的定义与特性
物理本质
vp 是与屏幕密度相关的虚拟像素单位,其换算公式为:
vp = px / (DPI / 160)
ArkUI中未指定单位的数值(如width: 220)默认单位为vp。
5.编写过程中,如果通过ArkTs提供的方法在模拟器中获取信息获取不到,可以是TypeScript
比如获取随机数,使用
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
async function generateSecureRandom() {
// 1. 创建随机数实例
let rand = cryptoFramework.createRandom();
// 2. 启用硬件熵源(增强随机性)
rand.enableHardwareEntropy();
// 3. 可选:设置随机种子
let seed = new Uint8Array([1, 2, 3]);
rand.setSeed({ seed });
// 4. 生成16字节随机数
let randomData = await rand.generateRandom(16);
console.log("Secure random:", randomData.data);
}
报错:
The generateRandom interface in the previewer is a mocked implementation and may behave differently than on a real device.
可以直接使用TypeScript方法:简单粗暴
getRandomInt(min: number, max: number): number {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
6.在ArkTs中不支持for - in 语法
遍历数组 → for...of
let list = [10, 20, 30];
for (let item of list) { // 直接获取元素值
console.log(item); // 输出:10, 20, 30
}
遍历对象属性 → Object.keys()
let obj = {a: 1, b: 2};
Object.keys(obj).forEach(key => {
console.log(key + ": " + obj[key]); // 输出:a:1, b:2
});
7.查看Map的key是否包含某个Key ,将Keys转为Array,其他方法类似
报错:
Property 'indexOf' does not exist on type 'IterableIterator<string>'. <ArkTSCheck>
将Map的keys转为Array,然后在调用IndexOf的方法,因为IndexOf的方法属于Array
let keys = ["appId","deviceId","os","channel","version","clientTime","nonce"]
for (let key of keys){
if (Array.from(requestData.keys()).indexOf(key) != -1) {
signData[key] = requestData[key]
}
}
8.对字符串类型的判断
在ArkTs中字符串会出现String 和 string 两种类型,其实是一个东西,但是在定义Map Array等时,需要定义类型,或者是需要取值判断类型
(1)对于String 使用方法instanceof
(2)对于string 类型使用typeof value ==='string'
typeof 运算符:
直接返回值的类型名称(如 'string'、'number' 等),是判断基础类型的标准方式。
严格相等判断:
需使用 === 'string' 精确匹配类型名称字符串。
适用场景:
适用于基础类型检测,不适用于复杂对象(如 String 对象实例)。
// 检测包括字符串对象
if (value instanceof String || typeof value === 'string') {
// 处理逻辑
}
9.Map的赋值容易引起的问题
由于是iOS开发,总是容易使用字面量的方式对Map赋值
map[key] = value
但是无论是ArkTs 还是 TypeScript 中都没有对应赋值方式,最关键的是这样赋值也不会报错,但是一旦取值就会出现不存在的问题

ArkTs ArkTs Map的内容
在对Map赋值使用set方法,取值使用get方法