带有async和await:变量的Typescript在赋值之前使用。ts(2454)
为什么typescript在这里抱怨变量未赋值?我是不是遗漏了一些关于示波器的明显信息带有async和await:变量的Typescript在赋值之前使用。ts(2454),typescript,react-testing-library,Typescript,React Testing Library,为什么typescript在这里抱怨变量未赋值?我是不是遗漏了一些关于示波器的明显信息 test('test', async () => { let renderResult: RenderResult; await act(async () => { renderResult = render(<Component />); }); await act(async () => { renderResult.rerender(<
test('test', async () => {
let renderResult: RenderResult;
await act(async () => {
renderResult = render(<Component />);
});
await act(async () => {
renderResult.rerender(<Component />);
});
// ERRROR: Variable 'renderResult' is used before being assigned.ts(2454)
expect(renderResult.container.firstElementChild!.getAttribute('src')).toBe('original');
});
test('test',async()=>{
let renderResult:renderResult;
等待动作(异步()=>{
renderResult=render();
});
等待动作(异步()=>{
renderResult.rerender();
});
//错误:变量“renderResult”在赋值之前使用。ts(2454)
expect(renderResult.container.firstElementChild!.getAttribute('src')).toBe('original');
});
编译器会抱怨,因为它未定义,并且您在使用它之前没有检查它。此外,如前所述,编译器无法知道异步函数内部发生了什么,因此无法知道是否最终分配了异步函数
您只需使用expect(renderResult?.container?.firstElementChild!.getAttribute('src')).toBe('original')代码>
因此,如果该链中的任何内容未定义,您将得到“false”。另一种解决方案是将renderResult
标记为renderResult
或未定义的
,然后在末尾使用可选链接访问它
test('test', async () => {
let renderResult: RenderResult | undefined
await act(async () => {
renderResult = render(<Component />);
});
await act(async () => {
renderResult.rerender(<Component />);
});
// ERRROR: Variable 'renderResult' is used before being assigned.ts(2454)
expect(renderResult?.container.firstElementChild!.getAttribute('src')).toBe('original');
});
test('test',async()=>{
let renderResult:renderResult |未定义
等待动作(异步()=>{
renderResult=render();
});
等待动作(异步()=>{
renderResult.rerender();
});
//错误:变量“renderResult”在赋值之前使用。ts(2454)
expect(renderResult?.container.firstElementChild!.getAttribute('src')).toBe('original');
});
您将收到此错误,因为您的tsconfig.json中有。因此,编译器向您显示变量可能具有未定义的值
这里的选项是
- 要使用实例初始化变量(或空值,如字符串的
”
,数组的[]
,等等)
- 使用
(
expect(renderResult!.container.firstEleme…
)
- 禁用
strictNullChecks
在tsconfig.json中
- 或任何其他方式
检查未定义的值或断言该值未定义
如果您使用的是 StuttUnLtCuffs<代码>,您应该考虑使用null对象模式。 AFAIK Type Script不分析ACT函数。
已到达。好的,很公平。但是我应该如何重新构造代码?目前我使用了@ts ignore,这似乎有帮助,但是…我有一个相同的问题:)。现在,你可以说renderResult!无论编译器在哪里抱怨。