diff --git a/docs/requirement/To-do_list.md b/docs/requirement/To-do_list.md
index b7b3dbbc..c2089f92 100644
--- a/docs/requirement/To-do_list.md
+++ b/docs/requirement/To-do_list.md
@@ -1,25 +1,36 @@
# To-do list
-## issue
+## History
-| 需求 | 新需求提供了什么功能? | 该需求带来的价值、应用场景? |
-| ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------- |
-| [新需求]:工具生成代码中增加打印调试信息 | 工具生成代码中增加关键节点信息打印,便于开发者确认流程 | 开发者通过关键信息打印,可以迅速定位问题 |
-| [新需求]: 回调返回值不支持number类型&&箭头函数参数为回调函数时,编译报错 | 1.当前回调返回值只支持string/boolean/void, 不支持其为number类型;
2.箭头函数的参数是箭头函数形式的回调函数时,编译报错。
.d.ts文件内容如下:
declare namespace napitest {
export class A {
a: string;
}
export interface InterfaceA {
callFunction: (result: number) => void;
}
export interface InterfaceB {
funcByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;
}
// export const addByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;
}
export default napitest; | 扩展工具的特性范围,提高工具可用性 |
-| [新需求]: (等待更佳解决方案)分离生成的工具代码普通方法和回调方法,防止嵌套使用头文件 | 需求背景: 当前工具生成的中间代码,普通方法和回调方法的接口均在一个头文件里,这样会导致嵌套使用头文件造成可读性不强,需要整改生成代码将普通方法和回调方法的接口分离到不同头文件,增加易用性和可读性
需求阻塞点:
由于工具生成的中间代码均在 XXXmiddle.cpp 中,将XXX.h分离成XXXToC.h与XXXToJs.h之后,XXXmiddle.cpp中include, 若.d.ts中的文件声明一个interface类中全部定义为注册回调的方法,按照预期应该将该interface声明在XXXToJs.h中,而由于注册回调的中间代码都在XXXmiddle.cpp中, XXXmiddle.cpp中该interface的构造函数用到了XXXToJs.h中定义的类,这时若要解决这个问题,就需将XXXmiddle.cpp文件进行拆分,这样代码改动太大,需寻求更佳的解决方案
当前进展:
当前修改无法跑过test_on测试用例集 | |
-| [新需求]: [napi_tool] on/off第二个参数支持object | [napi_tool] on/off第二个参数支持object,其中object中定义需要注册的回调
function on(type: 'missionEvent', listener: MissionListener): number;
export interface MissionListener {
onMissionCreated(mission: number): void;
onMissionDestroyed(mission: number): void;
} | 扩展注册的使用场景,增加工具易用性 |
-| [新需求1130后]: on注册回调的箭头函数支持携带js返回值给C++ | on注册回调的箭头函数支持携带js返回值给C++;
1130后支持 | 业务需要根据回调返回值进行后续处理的场景 |
-| [新需求1130后调研]: 支持js业务代码回调接口中的回调js函数 | function_direct处理逻辑覆盖此场景,需要增加只传递回调,不触发的场景
.d.ts定义:
function callbackWrapper(original: Function): (err: Object, value: Object) => void;
调用方式:
function callbackWrapper(original) {
if (typeof original !== 'function') {
let error = new BusinessError(`Parameter error.The type of ${original} must be function`);
throw error;
}
const descriptors = getOwnPropertyDescriptors(original);
if (typeof descriptors.length.value === 'number') {
descriptors.length.value++;
}
if (typeof descriptors.name.value === 'string') {
descriptors.name.value += 'callbackified';
}
function cb(...args) {
callbackified(original, ...args);
}
Object.defineProperties(cb, descriptors);
return cb;
} | 扩展工具的特性范围,提高工具可用性 |
-| [新需求1130后]: type, interface支持成员变量any, object, Enum为可选参数 | type, interface当前成员变量支持any, object, Enum可选参数的转换
当前interface/type支持可选参数类型已经包括:number, string, boolean, Array, string/number/boolean[], Map, {[key:string]:string/number/boolean}, number \| string \|boolean
待支持类型:any, object, Enum
.d.ts文件如下所示:
export enum LaunchReason {
UNKNOWN = 0,
START_ABILITY = 1,
CALL = 2,
CONTINUATION = 3,
}
type test =
{
param1?: object;
param2?: any;
param3?: Array;
param4?: Map;
$param5?: any;
param6?: Array;
param7?: Map;
param8?: LaunchReason;
}
interface interfaceTest
{
param1?: object;
param2?: any;
param3?: Array;
param4?: Map;
$param5?: any;
param6?: Array;
param7?: Map;
param8?: LaunchReason;
}
function func(v1: test, v2: interfaceTest): void; | 扩展工具的特性范围,提高工具可用性 |
-| modify gn faq and add storytest for api, service, ts tools | 修改gn工具faq文档并为ts, api, service工具增加storytest,可自动化测试 | |
-| [调研]ts接口定义入参/变量为any,JS调用时部分参数类型报错 | ts接口定义入参/变量为any,JS调用时参数类型为map、array、interface、interface(enum)嵌套时报错
ts定义如下:
function fun1(v: any, v1: string): number;
JS调用如下:
// map> --当前不支持
ret = test.fun1({"test": ["okay", "okay"], "test1": ["res", "res"]}, 'aaa');
assert.strictEqual(ret, 0);
// Array