Typescript 如何将此函数重写为接口?
我的目标是在界面中编写所有内容,即打字脚本。这是给我的 这是我无法放入接口的函数。当前的解决方案是将其放在接口之外,但导入会很难看,例如从“…”导入AudioRecorderModule,{addAudioRecorderEventListener}Typescript 如何将此函数重写为接口?,typescript,react-native,Typescript,React Native,我的目标是在界面中编写所有内容,即打字脚本。这是给我的 这是我无法放入接口的函数。当前的解决方案是将其放在接口之外,但导入会很难看,例如从“…”导入AudioRecorderModule,{addAudioRecorderEventListener} export const addAudioRecorderEventListener = ( listener: (data: number[]) => void, ) => eventEmitter.addListener('re
export const addAudioRecorderEventListener = (
listener: (data: number[]) => void,
) => eventEmitter.addListener('read', listener);
录音机.module.ts
import {NativeEventEmitter, NativeModules} from 'react-native';
import AudioRecorderInterface from './AudioRecorder.d';
const {AudioRecorderModule} = NativeModules;
const eventEmitter = new NativeEventEmitter(AudioRecorderModule);
export const addAudioRecorderEventListener = (
listener: (data: number[]) => void,
) => eventEmitter.addListener('read', listener);
export default AudioRecorderModule as AudioRecorderInterface;
录音机
export default interface AudioRecorderInterface {
startAudioRecordingAsync(): Promise<null>;
stopAudioRecordingAsync(): Promise<null>;
}
导出默认接口AudioRecorder接口{
startAudioRecordingAsync():承诺;
stopAudioRecordingAsync():承诺;
}
我不明白为什么要从.d.ts
导入。您应该将界面放入.ts
文件中,并在生成代码时生成.d.ts
为了调用新的NativeEventMitter(AudioRecorderModule)
,模块必须实现EventSubscriptionVendor
接口
我想这段代码回答了你的问题:
interface AudioRecorderInterface {
startAudioRecordingAsync(): Promise<null>;
stopAudioRecordingAsync(): Promise<null>;
addAudioRecorderEventListener(listener: (data: number[]) => void): EmitterSubscription;
}
const AudioRecorderModule = NativeModules.AudioRecorderModule as AudioRecorderInterface & EventSubscriptionVendor;
const eventEmitter = new NativeEventEmitter(AudioRecorderModule);
AudioRecorderModule.addAudioRecorderEventListener = (
listener: (data: number[]) => void,
) => eventEmitter.addListener('read', listener);
export default AudioRecorderModule;
接口录音机接口{
startAudioRecordingAsync():承诺;
stopAudioRecordingAsync():承诺;
addAudioRecorderEventListener(监听器:(数据:number[])=>void:EmitterSubscription;
}
const AudioRecorderModule=NativeModules.AudioRecorderModule作为AudioRecorderInterface&EventSubscriptionVendor;
const eventEmitter=新的NativeEventMitter(AudioRecorderModule);
AudioRecorderModule.addAudioRecorderEventListener=(
侦听器:(数据:number[])=>void,
)=>eventEmitter.addListener('read',listener);
导出默认的AudioRecorderModule;
但是请注意,当我们将用作AudioRecorderInterface&EventSubscriptionVendor
时,我们告诉typescript模块必须实现这些接口。如果模块没有实际实现这些方法,您将遇到问题。我不明白您为什么要从.d.ts
导入。您应该将界面放入.ts
文件中,并在生成代码时生成.d.ts
为了调用新的NativeEventMitter(AudioRecorderModule)
,模块必须实现EventSubscriptionVendor
接口
我想这段代码回答了你的问题:
interface AudioRecorderInterface {
startAudioRecordingAsync(): Promise<null>;
stopAudioRecordingAsync(): Promise<null>;
addAudioRecorderEventListener(listener: (data: number[]) => void): EmitterSubscription;
}
const AudioRecorderModule = NativeModules.AudioRecorderModule as AudioRecorderInterface & EventSubscriptionVendor;
const eventEmitter = new NativeEventEmitter(AudioRecorderModule);
AudioRecorderModule.addAudioRecorderEventListener = (
listener: (data: number[]) => void,
) => eventEmitter.addListener('read', listener);
export default AudioRecorderModule;
接口录音机接口{
startAudioRecordingAsync():承诺;
stopAudioRecordingAsync():承诺;
addAudioRecorderEventListener(监听器:(数据:number[])=>void:EmitterSubscription;
}
const AudioRecorderModule=NativeModules.AudioRecorderModule作为AudioRecorderInterface&EventSubscriptionVendor;
const eventEmitter=新的NativeEventMitter(AudioRecorderModule);
AudioRecorderModule.addAudioRecorderEventListener=(
侦听器:(数据:number[])=>void,
)=>eventEmitter.addListener('read',listener);
导出默认的AudioRecorderModule;
但是请注意,当我们将用作AudioRecorderInterface&EventSubscriptionVendor
时,我们告诉typescript模块必须实现这些接口。如果模块没有实际实现这些方法,您将遇到问题。我认为我在d.ts
应该如何工作方面犯了错误。我还尝试了您的解决方案const AudioRecorderModule=NativeModules.AudioRecorderModule作为AudioRecorderInterface&EventSubscriptionVendor代码>。new NativeEventMitter()
只接受带有NativeModule
类型的参数。我发现您这样做很有趣AudioRecorderModule.addAudioRecorderEventListener=(data=>void)=>eventEmitter.addListener()
我今晚或明天早上会试试。这是TypeScript调用方法的推荐方式,还是我觉得这是一种很有攻击性的方法?无论如何,谢谢你!明天早上我会将此标记为解决方案,它看起来确实是解决方案。老实说,我没有太多使用NativeModules
的经验。一般来说,我擅长识别TS错误,因此我可以看到需要的类型,但我不知道AudioRecorderModule
实际上是什么。react native中的NativeModules
对象的类型非常松散,因此当您访问属性时,属性具有typeany
:我使用as
来断言正确的类型,但也许您可以扩展react nativeNativeModulesStatic
类型。我正在添加addAudioRecorderEventListener
作为AudioRecorderModule
对象的一个属性,这……可能还可以吗?但我也不知道录音模块实际上是什么样子。我只是断言它需要什么样的外观才能让你的代码工作。我想我在d.ts
应该如何工作上犯了错误。我还尝试了您的解决方案const AudioRecorderModule=NativeModules.AudioRecorderModule作为AudioRecorderInterface&EventSubscriptionVendor代码>。new NativeEventMitter()
只接受带有NativeModule
类型的参数。我发现您这样做很有趣AudioRecorderModule.addAudioRecorderEventListener=(data=>void)=>eventEmitter.addListener()
我今晚或明天早上会试试。这是TypeScript调用方法的推荐方式,还是我觉得这是一种很有攻击性的方法?无论如何,谢谢你!明天早上我会将此标记为解决方案,它看起来确实是解决方案。老实说,我没有太多使用NativeModules
的经验。一般来说,我擅长识别TS错误,因此我可以看到需要的类型,但我不知道AudioRecorderModule
实际上是什么。react native中的NativeModules
对象的类型非常松散,因此当您访问属性时,属性具有typeany
:我使用as
来断言正确的类型,但是也许您可以扩展react nativeNativeModulesStatic
类型。我正在添加addAudioRecorderEventListener
作为AudioRecorderModule
对象的属性