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) => {
// console.log(99999, 111)
// })
}
init(params : TSpeakInitParams, callback : (res : TSpeakResult) => 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) => MyApiResult
export type TSpeakResult = {
success : UInt
message : string
}
export type TSpeakInitParams = {
lang ?: 'ZH' | string
country ?: 'CN' | string
speechRate?:UInt
}
操作步骤:
- 运行程序
预期结果:
- 可以正确编译插件
实际结果:
- 报错:
error: 类型不匹配: 推断类型是<code><no name provided></code>,但预期的是(Int) -> 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) {
// 回调逻辑
}
}));