我对Typescript有一个小问题,不确定如何解决此问题的最佳方法,并且我不想为Typescript编译器添加额外的逻辑,所以这是问题所在,这是针对反应应用程序:
let myVar: ComplexType;
let response;
useEffect(() => doApiCall());
if (loading) {
return <Spinner />
}
// from API
if (response) {
myVar = response.value;
}
return (<MyComp data={myVar} />)
所以问题是我可以声明一个具有类型的变量并在以后分配它,编译器抱怨分配之前我正在使用它。
由于类型不匹配,我也不能分配null。
我试图将类型更改为'ComplexType | null”,但它抱怨我的组件由于null而没有采用该类型的prop。我也无法继续更改道具的类型,因为这会导致更多问题。
所以我对最好的方法有些困惑。
我发现,如果将包装好的组件返回一个if逻辑'if(myVar)',那么它可以工作,但是我感觉我正在添加额外的逻辑来满足编译器的要求。
大家如何处理?
我试图创建一个虚拟示例,以在下面展示我的问题:
interface MyType {
a: string,
b: number
}
let item: MyType;
let loading = true;
setTimeout(() => {
loading = true;
item = { a: 'test', b: 7 };
})
if (!loading) {
doSomething(item);
}
function doSomething(x: MyType) {
console.log(x);
}