一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
我有一个异步函数,试图返回一个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链的下一环节。
最后
公众号:
小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西有兴趣的小伙伴欢迎关注我哦,我是:
何小玍。大家一起进步鸭