TypeScript异步函数返回类型定义报错:如何正确定义返回对象或null的类型?
解决异步函数返回类型不匹配的TypeScript报错
你这个问题是典型的TypeScript类型不兼容导致的:函数声明的返回类型是Promise<string | null>,但实际调用wbot.getNumberId返回的是ContactId | null,ContactId和string属于不兼容的类型,所以触发了报错。
下面给你两个可行的解决思路:
思路1:将ContactId转换为字符串类型
如果ContactId可以被转换为字符串(比如它本身实现了toString()方法,或者是一个包含字符串属性的对象),你可以把返回值转换成字符串后再返回,这样就能匹配你原本期望的string | null类型:
const checkIsValidConnection = async (number: string): Promise<string | null> => { const defaultConnection = await GetDefaultConnection(); const wbot = getWbot(defaultConnection.id); const contactId = await wbot.getNumberId(`${number}`); // 转换为字符串,若contactId为null则返回null return contactId ? contactId.toString() : null; }; export default checkIsValidConnection;
如果ContactId是一个带有特定字符串属性的对象(比如常见的{ _serialized: string }结构),你可以直接提取这个属性:
return contactId?._serialized || null;
思路2:修改函数返回类型以匹配实际返回值
如果你不需要把结果转换成字符串,直接使用ContactId类型也可以,那只需要把函数的返回类型改成Promise<ContactId | null>即可,让类型声明和实际返回值对齐:
const checkIsValidConnection = async (number: string): Promise<ContactId | null> => { const defaultConnection = await GetDefaultConnection(); const wbot = getWbot(defaultConnection.id); const contactId = await wbot.getNumberId(`${number}`); return contactId; }; export default checkIsValidConnection;
这两种方案都能解决你遇到的类型报错问题,你可以根据自己的业务需求选择合适的方式。
内容的提问来源于stack exchange,提问作者Wagner Fillio
相关产品推荐
相关产品推荐

