【发布时间】:2021-10-08 06:44:35
【问题描述】:
好吧,我被难住了。我有一个简单的 React 组件(刚开始)。我需要获取数据,所以我正在等待一些异步数据。这是我现在的解决方案:
import { Component } from "react";
import { Bible } from "./models";
interface State {
bible?: Bible;
}
export class RevApp extends Component<{}, State> {
state = {
bible: undefined,
};
componentDidMount() {
Bible.onReady().then((bible) => {
this.setState({
bible,
});
});
}
render() {
const { bible } = this.state;
//return <div>{bible ? bible.ls() : "Loading Bible..."}</div>;
if (bible) {
return <div>{bible.ls()}</div>;
} else {
return <div>Loading Bible...</div>;
}
}
}
由于某种原因,我得到bible.ls()(特别是圣经对象)的编译器错误“对象可能未定义”。这没有任何意义!我试过放一个! (即bible!.ls(),但随后我收到一条抱怨“'never' 类型上不存在属性 'ls'”。
真正令人头疼的是,这个错误只出现在我的 linter 中,而不是我的编译器中。这一切都很好,除了当我推送到生产环境时,我的代码需要在编译之前通过 linter。
谁能告诉我为什么会出现这种行为?
这是我的 tsconfig,以防它与问题有关(由 nextjs 生成):
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"baseUrl": "."
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
打字稿版本“4.3.5”
节点版本“14.17.3”
【问题讨论】:
-
如果您像
state: State = { bible: undefined };一样明确地注释state属性,它会得到修复吗?如果您可以生成适合放入独立 IDE(如 The TypeScript Playground)的 minimal reproducible example,这将非常有帮助,其中唯一存在的问题就是您看到的问题。
标签: reactjs typescript next.js react-tsx