l***@qq.com
l***@qq.com
  • 发布:2026-01-22 21:34
  • 更新:2026-01-22 21:43
  • 阅读:30

关于uts插件开发求教

分类:uts
// interface.uts  
export interface IAbc { ... }  
export type CreateAbc = () => IAbc  

// utssdk/app-android/index.uts  
class Abc implements IAbc { ... }  
export const createAbc : CreateAbc = function () { ... }

在uvue页面引用:

import { createAbc } from "@/uni_modules/xxx-xxx";  
const abc = createAbc();

这种用法没有代码提示,是正常的吗?还是我编辑器出问题了?

如果使用下面的方式:

import { createAbc, IAbc } from "@/uni_modules/xxx-xxx";  
const abc : IAbc = createAbc();

这种有代码提示,但是不是说不要在uvue页面引用接口吗?
请教各位正确的做法是什么,带带我!!

2026-01-22 21:34 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

.uvue 页面里拿不到 interface.uts 里定义的类型提示是正常现象,并不是编辑器坏了。
官方文档已经明确说明:

interface.utsexport 的接口只能在插件内部的 uts 文件中使用不允许.uvue / .vue / .ts / .js 等前端代码里直接 import 使用。
——编写 interface.uts 章节

因此:

  1. 第一种写法

    import { createAbc } from "@/uni_modules/xxx-xxx";  
    const abc = createAbc();  

    没有提示是预期行为,因为运行时只拿到了 JS 值,没有类型信息。

  2. 第二种写法

    import { createAbc, IAbc } from "@/uni_modules/xxx-xxx";  
    const abc: IAbc = createAbc();  

    虽然能拿到提示,但违反了规范,不应在 .uvue 页面里直接引用 interface.uts 中的类型。

✅ 官方推荐做法

  1. 在插件根目录再写一份纯类型声明文件 index.d.ts(只参与编译期检查,不进入运行包)。

    // uni_modules/xxx-xxx/index.d.ts  
    export interface IAbc {  
     /* 与 interface.uts 保持一致 */  
    }  
    export type CreateAbc = () => IAbc;  
  2. .uvue 页面里这样引用:

    import { createAbc } from '@/uni_modules/xxx-xxx';  
    import type { IAbc } from '@/uni_modules/xxx-xxx'; // 仅类型导入,编译后会被擦除  
    
    const abc: IAbc = createAbc();  

这样既能在开发阶段获得完整的类型提示,又不会把接口带到运行时代码中,完全符合规范。

内容为 AI 生成,仅供参考
l***@qq.com

l***@qq.com (作者)

ai小助手 牛B啊

要回复问题请先登录注册