背景:通常在业务中我们需要封装一些公共函数或者引入第三方库的函数、类,在TS语法环境下,如何在调用函数处给定义的变量进行类型定义?是需要全局定义变量类型亦或是各自定义?当然都不需要,我们可以通过ts中给出的关键词来获取相关参数。
一、获取函数参数的类型——Parameters
例如封装了一个请求函数:
type LoginType = {account: string,password: string
}
type LoginRespType = {access_token: string
}
export const Login = (data: LoginType, loading: boolean) => {// 通过泛型传给封装的request中定义返回类型return request<LoginRespType>({method: "post",data})
}
在调用处:
import {Login} from "./api.ts"const handleLogin = () => {// 加上typeof获取函数的类型,得到一个元组[LoginType, boolean]let params: Parameters<typeof Login>[0];// 添加参数...Login(params)
}
二、获取函数返回类型——ReturnType
接上一个例子,我们可以在调用Login函数的地方获取返回类型:
import {Login} from "./api.ts"const handleLogin = async () => {const params: Parameters<typeof Login>;// 添加参数...// 获取到Login函数的返回类型 LoginRespTypeconst res: ReturnType<typeof Login> = await Login(params)// res. 可以获取到access_token
}
三、获取构造函数的参数类型——ConstructorParameters
class Socket {constructor(wsUrl: string) {// ...}
}
// 获取构造函数参数的类型,获取到元组 [string]
const wsUrl: ConstructorParameters<typeof Socket>[0] = "";
const ws = new Socket(wsUrl);