首页 > 解决方案 > TypeScript + React.Lazy

问题描述

const Game = React.lazy(() => new Promise( (resolve) => {
    setTimeout( () => resolve(import('./Game')) , 1000)
}))

错误:错误:(6、35)TS2345:'Promise<typeof import("D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game")>' 类型的参数不可分配到类型参数'{默认值:从不;} | PromiseLike<{ 默认值:从不;}> | 不明确的'。类型 'Promise<typeof import("D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game")>' 不可分配给类型 'PromiseLike<{ 默认值:从不;}>'。'then' 的属性类型不兼容。类型 '<TResult1 = typeof import("D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game"), TResult2 = never>(onfulfilled?: ((value: typeof import(" D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game")) => 结果1 | PromiseLike<...>) | 空 | undefined, onrejected?: ((reaso...' is notassignable to type '<TResult1 = { default: never; }, TResult2 = never>(onfulfilled?: ((value: { default: never; }) => TResult1 | PromiseLike) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<...>) | null | undefined) => PromiseLike<...>'. 参数类型 'onfulfilled' 和'onfulfilled' 不兼容。参数 'value' 和 'value' 的类型不兼容。类型 'typeof import("D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components 中缺少属性 'default' /Stages/Game")' 但在类型“{默认值:从不;}”中是必需的。不可分配给类型 '<TResult1 = { 默认值:从不;}, TResult2 = never>(onfulfilled?: ((value: { default: never; }) => TResult1 | PromiseLike) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<... >) | null | undefined) => PromiseLike<...>'。参数“onfulfilled”和“onfulfilled”的类型不兼容。参数 'value' 和 'value' 的类型不兼容。类型'typeof import(“D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game”)'中缺少属性'default',但类型'{默认值:从不; }'。不可分配给类型 '<TResult1 = { 默认值:从不;}, TResult2 = never>(onfulfilled?: ((value: { default: never; }) => TResult1 | PromiseLike) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<... >) | null | undefined) => PromiseLike<...>'。参数“onfulfilled”和“onfulfilled”的类型不兼容。参数 'value' 和 'value' 的类型不兼容。类型'typeof import(“D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game”)'中缺少属性'default',但类型'{默认值:从不; }'。任何)=> TResult2 | PromiseLike<...>) | 空 | 未定义)=> PromiseLike<...>'。参数“onfulfilled”和“onfulfilled”的类型不兼容。参数 'value' 和 'value' 的类型不兼容。类型'typeof import(“D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game”)'中缺少属性'default',但类型'{默认值:从不; }'。任何)=> TResult2 | PromiseLike<...>) | 空 | 未定义)=> PromiseLike<...>'。参数“onfulfilled”和“onfulfilled”的类型不兼容。参数 'value' 和 'value' 的类型不兼容。类型'typeof import(“D:/PROGECTS/SnakeReactReduxTS/snake-react-redux-ts/src/Components/Stages/Game”)'中缺少属性'default',但类型'{默认值:从不; }'。

他想从我这里得到什么?

标签: javascriptreactjstypescript

解决方案


lazy函数返回一个 {default: ... } 对象的承诺,该对象被异步调用,await直到承诺未被解决,延迟,1000 ms最后将导入Game组件并返回它。

    const Game = React.lazy(async () => {
      await new Promise(resolve => setTimeout(resolve, 1000));
      return import('./Game');
    });

希望这可以帮助!!


推荐阅读