一、限制省略函数返回类型标注
规则:arkts-no-implicit-return-types
级别:错误
ArkTS在部分场景中支持对函数返回类型进行推断。当return语句中的表达式是对某个函数或方法进行调用,且该函数或方法的返回类型没有被显著标注时,会出现编译时错误。在这种情况下,请标注函数返回类型。
TypeScript
// 只有在开启noImplicitAny选项时会产生编译时错误
function f(x: number) {
if (x <= 0) {
return x;
}
return g(x);
}
// 只有在开启noImplicitAny选项时会产生编译时错误
function g(x: number) {
return f(x - 1);
}
function doOperation(x: number, y: number) {
return x + y;
}
f(10);
doOperation(2, 3);
ArkTS
// 需标注返回类型:
function f(x: number): number {
if (x <= 0) {
return x;
}
return g(x);
}
// 可以省略返回类型,返回类型可以从f的类型标注推导得到
function g(x: number): number {
return f(x - 1);
}
// 可以省略返回类型
function doOperation(x: number, y: number) {
return x + y;
}
f(10);
doOperation(2, 3);
二、不支持参数解构的函数声明
规则:arkts-no-destruct-params
级别:错误
ArkTS要求实参必须直接传递给函数,且必须指定到形参。
TypeScript
function drawText({ text = '', location: [x, y] = [0, 0], bold = false }) {
text;
x;
y;
bold;
}
drawText({ text: 'Hello, world!', location: [100, 50], bold: true });
ArkTS
function drawText(text: String, location: number[], bold: boolean) {
let x = location[0];
let y = location[1];
text;
x;
y;
bold;
}
function main() {
drawText('Hello, world!', [100, 50], true);
}
三、不支持在函数内声明函数
规则:arkts-no-nested-funcs
级别:错误
ArkTS不支持在函数内声明函数,改用lambda函数。
TypeScript
function addNum(a: number, b: number): void {
// 函数内声明函数
function logToConsole(message: string): void {
console.log(message);
}
let result = a + b;
// 调用函数
logToConsole('result is ' + result);
}
ArkTS
function addNum(a: number, b: number): void {
// 使用lambda函数代替声明函数
let logToConsole: (message: string) => void = (message: string): void => {
console.log(message);
}
let result = a + b;
logToConsole('result is ' + result);
}
本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。