1e41f4b71Sopenharmony_ci# import native模块
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci在ES6(ECMAScript6.0)模块设计中,社区使用import语法加载其他文件导出的内容(ECMA规范定义语法规格)。
4e41f4b71Sopenharmony_ci为支持开发者便捷使用该功能导入native模块(so)导出的内容,ArkTS进行相关适配,并给出以下几种支持写法。
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci## 直接导入
7e41f4b71Sopenharmony_ci在native模块的index.d.ts文件中导出,在文件内直接导入。
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci### 具名导入
10e41f4b71Sopenharmony_ci```ts
11e41f4b71Sopenharmony_ci// libentry.so对应的index.d.ts
12e41f4b71Sopenharmony_ciexport const add: (a: number, b: number) => number;
13e41f4b71Sopenharmony_ci```
14e41f4b71Sopenharmony_ci```ts
15e41f4b71Sopenharmony_ci// test.ets
16e41f4b71Sopenharmony_ciimport { add } from 'libentry.so'
17e41f4b71Sopenharmony_ciadd(2, 3);
18e41f4b71Sopenharmony_ci```
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci### 默认导入
21e41f4b71Sopenharmony_ci```ts
22e41f4b71Sopenharmony_ci// libentry.so对应的index.d.ts
23e41f4b71Sopenharmony_ciexport const add: (a: number, b: number) => number;
24e41f4b71Sopenharmony_ci```
25e41f4b71Sopenharmony_ci```ts
26e41f4b71Sopenharmony_ci// test.ets
27e41f4b71Sopenharmony_ciimport add from 'libentry.so'
28e41f4b71Sopenharmony_ciadd.add(2, 3);
29e41f4b71Sopenharmony_ci```
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci### 命名空间导入
32e41f4b71Sopenharmony_ci```ts
33e41f4b71Sopenharmony_ci// libentry.so对应的index.d.ts
34e41f4b71Sopenharmony_ciexport const add: (a: number, b: number) => number;
35e41f4b71Sopenharmony_ci```
36e41f4b71Sopenharmony_ci```ts
37e41f4b71Sopenharmony_ci// test.ets
38e41f4b71Sopenharmony_ciimport * as add from 'libentry.so'
39e41f4b71Sopenharmony_ciadd.add(2, 3);
40e41f4b71Sopenharmony_ci```
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci## 间接导入
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci### 转为具名变量导出再导入
45e41f4b71Sopenharmony_ci```ts
46e41f4b71Sopenharmony_ci// test1.ets
47e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
48e41f4b71Sopenharmony_ciexport { hilog }
49e41f4b71Sopenharmony_ci```
50e41f4b71Sopenharmony_ci```ts
51e41f4b71Sopenharmony_ci// test2.ets
52e41f4b71Sopenharmony_ciimport { hilog } from './test1'
53e41f4b71Sopenharmony_cihilog.info(0x000, 'testTag', '%{public}s', 'test');
54e41f4b71Sopenharmony_ci```
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci### 转为命名空间导出再导入
57e41f4b71Sopenharmony_ci```ts
58e41f4b71Sopenharmony_ci// libentry.so对应的index.d.ts
59e41f4b71Sopenharmony_ciexport const add: (a: number, b: number) => number;
60e41f4b71Sopenharmony_ci```
61e41f4b71Sopenharmony_ci```ts
62e41f4b71Sopenharmony_ci// test1.ets
63e41f4b71Sopenharmony_ciexport * from 'libentry.so'
64e41f4b71Sopenharmony_ci```
65e41f4b71Sopenharmony_ci```ts
66e41f4b71Sopenharmony_ci// test2.ets
67e41f4b71Sopenharmony_ciimport { add } from './test1'
68e41f4b71Sopenharmony_ciadd(2, 3);
69e41f4b71Sopenharmony_ci```
70e41f4b71Sopenharmony_ci**注意:** 不支持native模块导出和导入同时使用命名空间。  
71e41f4b71Sopenharmony_ci**反例:** 
72e41f4b71Sopenharmony_ci```ts
73e41f4b71Sopenharmony_ci// test1.ets
74e41f4b71Sopenharmony_ciexport * from 'libentry.so'
75e41f4b71Sopenharmony_ci```
76e41f4b71Sopenharmony_ci```ts
77e41f4b71Sopenharmony_ci// test2.ets
78e41f4b71Sopenharmony_ciimport * as add from 'file1'
79e41f4b71Sopenharmony_ci// 无法获取add对象
80e41f4b71Sopenharmony_ci```
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci## 动态导入
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci### 直接导入
85e41f4b71Sopenharmony_ci```ts
86e41f4b71Sopenharmony_ci// libentry.so对应的index.d.ts
87e41f4b71Sopenharmony_ciexport const add: (a: number, b: number) => number;
88e41f4b71Sopenharmony_ci```
89e41f4b71Sopenharmony_ci```ts
90e41f4b71Sopenharmony_ci// test.ets
91e41f4b71Sopenharmony_ciimport('libentry.so').then((ns:ESObject) => {
92e41f4b71Sopenharmony_ci    ns.default.add(2, 3);
93e41f4b71Sopenharmony_ci})
94e41f4b71Sopenharmony_ci```
95e41f4b71Sopenharmony_ci### 间接导入
96e41f4b71Sopenharmony_ci```ts
97e41f4b71Sopenharmony_ci// test1.ets
98e41f4b71Sopenharmony_ciimport add from 'libentry.so'
99e41f4b71Sopenharmony_ciexport { add }
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_ci// test2.ets
102e41f4b71Sopenharmony_ciimport('./test1').then((ns:ESObject) => {
103e41f4b71Sopenharmony_ci    ns.add.add(2, 3);
104e41f4b71Sopenharmony_ci})
105e41f4b71Sopenharmony_ci```
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci**注意:** 不支持动态加载时,导出文件使用命名空间导出。  
108e41f4b71Sopenharmony_ci**反例:** 
109e41f4b71Sopenharmony_ci```ts
110e41f4b71Sopenharmony_ci// test1.ets
111e41f4b71Sopenharmony_ciexport * from 'libentry.so'
112e41f4b71Sopenharmony_ci```
113e41f4b71Sopenharmony_ci```ts
114e41f4b71Sopenharmony_ci// test2.ets
115e41f4b71Sopenharmony_ciimport('./test1').then((ns:ESObject) => {
116e41f4b71Sopenharmony_ci    // 无法获取ns对象
117e41f4b71Sopenharmony_ci})
118e41f4b71Sopenharmony_ci```