【发布时间】:2022-01-14 07:10:09
【问题描述】:
我有一个返回类型的 Promise
person.ts
const personFactory: PersonFactory = (name, lastName) => ({ speak: () => console.log(`${name}:${lastName}`); });
const personPromise: Promise<PersonFactory | null> = Promise.resolve().then(function handler() { return personFactory });
export const loadPerson = (): Promise<PersonFactory | null> => {
return personPromise;
};
index.ts
declare global {
interface Metaverse {
Person?: PersonFactory;
}
}
export interface PersonClient {
speak: (args: string) => void;
}
export type PersonFactory = (firstName: string, lastName: string) => PersonClient;
person.ts 和 index.ts 打包后放入 npm 包中。
测试 ts 项目 - index.ts
import { loadPerson } from '@person/library';
const load = async () => {
const person = await loadPerson();
if (person) {
person('drag13', 'developer').speak('something');
}
}
load()
// 或
(async function() {
let person = await loadPerson();
person("drag13", "developer").speak("this===is===a===message")
})()
-- 更新
我使用了 Drag13 的示例并将其打包成一个 npm。当我调用 loadPerson 时,控制台会打印出说话的字符串。
但是有一个打字稿错误提示
TS2349: This expression is not callable. Type 'PersonFactory' has no call signatures.
【问题讨论】:
-
Promise.resolve().then(() => { console.log("Hello World") });不会产生PersonFactory -
请把光标放到
loadPerson并按F12。我对类型很好奇,或者提供图书馆的链接 -
现在好像没问题,也许我缓存了一些东西。
标签: typescript promise