TextToSpeech 类型不匹配 推断类型是`<no name provided>` 但预期的是(Int) -> Unit

TextToSpeech 类型不匹配 推断类型是<no name provided> 但预期的是(Int) -> Unit

开发环境 版本号 项目创建方式
Windows Windows 10 专业版 HBuilderX

示例代码:

// import { TSpeakInitParams, TSpeakResult } from "../interface.uts"  

import TextToSpeech from "android.speech.tts.TextToSpeech";  
import Locale from "java.util.Locale";  
import Context from "android.content.Context";  

import { TSpeakInitParams, TSpeakResult } from '../interface.uts'  

export class RockTtsSpeaker {  

    tts : TextToSpeech | null = null;  
    constructor() {  
        // this.tts = this.init({}, (e) =&gt; {  
        //  console.log(99999, 111)  
        // })  

    }  
    init(params : TSpeakInitParams, callback : (res : TSpeakResult) =&gt; void) : TextToSpeech {  
        const context = UTSAndroid.getUniActivity()!;  
        var speaker : TextToSpeech | null = null  
        speaker = TextToSpeech(context, TextToSpeech.OnInitListener({  
            onInit(status : UInt) {  

                if (status == TextToSpeech.SUCCESS as UInt) {  
                    // 设置语言为中文  
                    const result = speaker?.setLanguage(Locale.CHINA);  
                    if (result === TextToSpeech.LANG_MISSING_DATA || result === TextToSpeech.LANG_NOT_SUPPORTED) {  
                        callback({ success: status, message: 'TTS 不支持中文语音' });  
                    } else {  
                        callback({ success: status, message: '初始化成功' });  
                    }  
                    callback({ success: status, message: '初始化成功' });  
                } else {  
                    // callback({ success: Number.from(status), message: '初始化失败' });  
                    callback({ success: status, message: '初始化失败' });  
                }  
            }  
        }));  
        this.tts = speaker  
        return speaker  
    }  

}  

interface.uts

/* 同步函数定义 */  
export type MyApiSync = (paramA : boolean) =&gt; MyApiResult  

export type TSpeakResult = {  
    success : UInt  
    message : string  
}  

export type TSpeakInitParams = {  
    lang ?: 'ZH' | string  
    country ?: 'CN' | string  
    speechRate?:UInt  
}

操作步骤:

  • 运行程序

预期结果:

  • 可以正确编译插件

实际结果:

  • 报错:
    error: 类型不匹配: 推断类型是<code>&lt;no name provided&gt;</code>,但预期的是(Int) -&gt; Unit。
    16:50:41.032 at uni_modules/rock-tts/utssdk/app-android/RockTtsSpeaker.uts:22:62
    

2 回复

test-tts.zip是代码包


这个错误是因为在创建TextToSpeech.OnInitListener时类型不匹配导致的。问题出在UTS中对Kotlin/Java回调接口的处理方式上。

正确的写法应该是:

speaker = TextToSpeech(context, new TextToSpeech.OnInitListener({
    onInit(status: number) {
        // 回调逻辑
    }
}));
回到顶部