类型“Promise”不可分配给 TypeScript 中的类型

类型“Promise”不可分配给 TypeScript 中的类型

Type ‘Promise’ is not assignable to type in TypeScript

“Type ‘Promise’ is not assignable to type”TypeScript 错误发生在我们尝试将类型为Promise的值分配给类型不兼容的值时。要解决该错误,请Promise在赋值之前解决并使两个值兼容类型。

下面是错误如何发生的示例。

索引.ts
// 👇️ function example(): Promise<string> async function example() { const result = await Promise.resolve('hello world'); return result; } // ⛔️ Error: Type 'Promise<string>' is // not assignable to type 'string'.ts(2322) const str: string = example();

该函数被标记为async并且所有async函数都返回一个 Promise。上面示例中的函数的返回类型为Promise<string>.

TypeScript 告诉我们,我们不能将一个类型的值
Promise<string>赋给变量str,它的类型是string– 赋值两侧的类型不兼容。

要解决错误,请在分配之前解决承诺。

索引.ts
async function example() { const result = await Promise.resolve('hello world'); return result; } example().then((value) => { const str: string = value; console.log(str); // 👉️ "hello world" });

.then()在将值分配给变量之前,我们使用该方法来解决承诺str

如果您尝试在async函数内解析 Promise,请使用
await语法。

错误的一个常见原因是我们忘记等待承诺。

索引.ts
async function example() { // 👇️ forgot to use await const result = Promise.resolve('hello world'); // ⛔️ Error: Type 'Promise<string>' is // not assignable to type 'string'.ts(2322) const greeting: string = result; return greeting; }

result函数中的变量有一个类型,Promise<string>我们试图将它分配给一个需要string.

要解决该错误,请await在赋值之前使用关键字 resolve promise。

索引.ts
async function example() { // 👇️ const result: string const result = await Promise.resolve('hello world'); const greeting: string = result; return greeting; }

我们使用await关键字,现在结果变量存储一个string.

现在greetingresult变量具有兼容的类型,因此可以在不出现类型检查错误的情况下进行赋值。

这就是错误的原因 – 我们正试图将类型
Promise<T>的值分配给具有不同类型的值。

要解决这个错误,我们必须确保赋值语句左右两侧的值具有兼容的类型。

使用.then()语法解析承诺时,请注意它是异步的,并且只能在传递给then()方法的回调函数中访问已解析的值。

索引.ts
async function example() { const result = await Promise.resolve({ name: 'Tom', country: 'Chile', }); return result; } type Person = { name: string; country: string; }; example().then((value) => { const person: Person = value; console.log(person); // 👉️ {name: 'Tom', country: 'Chile'} }); // 👇️ code here runs before example().then() has finished

结论

“Type ‘Promise’ is not assignable to type”TypeScript 错误发生在我们尝试将类型为Promise的值分配给类型不兼容的值时。要解决该错误,请Promise在赋值之前解决并使两个值兼容类型。