我有以下 Typescript 代码,IDE 告诉我“此表达式不可调用。类型 'Pick<IUserContext, "clearAllLoginData">' 没有调用签名。” 但我不明白为什么。
据我理解,函数clearAllLoginData的参数logout应该是类型() => void,因为它是Pick从IUserContext接口中获得的。
任何指示表示赞赏!
interface IUserContext {
id?: number;
email?: string;
fname?: string;
lname?: string;
slname?: string;
companyId?: number;
companyName?: string;
clearAllLoginData: () => void;
setAllLoginData: () => void;
}
interface LogoutParams {
clearAllLoginData: Pick<IUserContext, "clearAllLoginData">;
afterLogout?: () => void;
}
export const logout = ({ clearAllLoginData, afterLogout }: LogoutParams):void => {
clearAllLoginData(); // <---- Error: "This expression is not callable"
if (afterLogout) {
afterLogout();
}
};
Run Code Online (Sandbox Code Playgroud)
通过从 Type 中选取属性 Keys(字符串文字或字符串文字的并集)集来构造类型。
换句话说 - 它从另一个对象类型创建一个对象类型。
Pick<IUserContext, "clearAllLoginData">
Run Code Online (Sandbox Code Playgroud)
将产生一个类型:
{
clearAllLoginData: () => void;
}
Run Code Online (Sandbox Code Playgroud)
它不会给你一种类型
() => void
Run Code Online (Sandbox Code Playgroud)
Pick在这里不是正确的工具。你需要这样的东西:
interface LogoutParams {
clearAllLoginData: IUserContext["clearAllLoginData"]
afterLogout?: () => void;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5196 次 |
| 最近记录: |