我有一个异步函数,试图返回一个object或null。
但是我在定义类型时出错了。
如何定义此数据类型?
const checkIsValidConnection = async (number: string): Promise<string | null> => { const defaultConnection = await GetDefaultConnection() const wbot = getWbot(defaultConnection.id) const contactId = await wbot.getNumberId(`${number}`) return contactId } export default checkIsValidConnection 复制代码
类型“ContactId | null”不可分配给类型“string | null”。类型“ContactId”不可分配给类型“string”。
首先要在tsconfig.json中配置ES2015.promise的lib,不然TypeScript无法支持Promise
网络异常,图片无法展示
|
接下来随意定义一个异步函数
export default function onLoginFn(param) { return new Promise(resolve => { axios.get('/login', param).then(r => { resolve(r) } } } 复制代码
然后用TypeScript声明文件定义期望返回的数据类型
declare namespace Service { interface login { id: number name: string <T = any> (date: T): Promise<T> } } 复制代码
最后再结合之前的异步函数
export default function login(): Promise<Service.login> { return new Promise(resolve => { axios.get('/login', param).then(r => { resolve(r) } } } 复制代码
只是多了个Promise返回值定义,但可以从then方法中看到返回值的代码提示了,还是很方便的。
网络异常,图片无法展示
|
总结
- 当Promise的回调函数返回非Promise对象的值时,
then
和catch
都生成一个状态为fulfilled
的Promise对象,并把该返回值传入Promise链的下一环节。 - 当Promise的回调函数返回值为Promise对象时,生成的Promise对象的状态由被返回的Promise对象决定,传入Promise链下一环节的值也由这个被返回的Promise决定。
- 当Promise的回调函数中抛出错误时,
then
和catch
都生成一个状态为rejected
的Promise对象,并把抛出的错误对象传入Promise链的下一环节。