类型“Promise”不可分配给 TypeScript 中的类型
Type ‘Promise’ is not assignable to type in TypeScript
“Type ‘Promise’ is not assignable to type”TypeScript 错误发生在我们尝试将类型为Promise
的值分配给类型不兼容的值时。要解决该错误,请Promise
在赋值之前解决并使两个值兼容类型。
下面是错误如何发生的示例。
// 👇️ 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
– 赋值两侧的类型不兼容。
要解决错误,请在分配之前解决承诺。
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
语法。
错误的一个常见原因是我们忘记等待承诺。
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。
async function example() { // 👇️ const result: string const result = await Promise.resolve('hello world'); const greeting: string = result; return greeting; }
我们使用await
关键字,现在结果变量存储一个string
.
现在greeting
和result
变量具有兼容的类型,因此可以在不出现类型检查错误的情况下进行赋值。
这就是错误的原因 – 我们正试图将类型
Promise<T>
的值分配给具有不同类型的值。
使用.then()
语法解析承诺时,请注意它是异步的,并且只能在传递给then()
方法的回调函数中访问已解析的值。
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
在赋值之前解决并使两个值兼容类型。