问题现象

声明文件没有默认导出,使用 import xxx from ‘module’ 在另一文件默认导入,编译不报错。

// test.d.ts文件export const addFunction: {add: (a: number, b: number) => number}
// index.ets文件import test from './test'
test.addFunction.add(1,2)

原因说明

此场景编译时不报错,原因是编译时的配置文件中开启了allowSyntheticDefaultImports选项,不仅允许没有默认导出的声明文件让另一文件默认导入,还兼容从那些使用 CommonJS(require)导出模块的库中导入默认导出(default exports),例如可以import default默认导入类似react这样的三方库。

react例:安装@type/react包,使用默认导入的方式,编译不报错。

import React from "react"
let a: string = React.useId()

CommonJS例:用默认导入方式导入commonjs模块。

// 编译文件import allFunction from 'library'
allFunction.sub(1,2)
// 依赖包的声明文件 index.d.tsdeclare const allFunction : {sub: (a: number, b: number) => number}export = allFunction
// 依赖包的实现文件 index.jsfunction sub(a, b) {return a - b}
var allFuntion = { sub }module.exports = allFuntion

解决方案

如果源码文件没有默认导出,那么可以尝试使用import * as xx from ‘xxx’ 去导入。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐