簡體   English   中英

覆蓋類型以防止不安全的任何調用

[英]Overriding types to prevent unsafe any calls

我在 React Native 中使用 react-test-renderer 進行了一些測試,例如:

it('should keep login button disabled', async () => {                       
  const emailInput = root.findByProps({ testID: 'EmailInput' }); 
  const passwordInput = root.findByProps({ testID: 'PasswordInput' });  
  await act(async () => {                                                   
    await emailInput.props.onChangeText('abc'); 
    await passwordInput.props.onChangeText('abc');                          
  }); 
  const loginButton = root.findByProps({ testID: 'LoginButton' });          
    expect(loginButton.props.type).toBe('disabled');                          
  });

這工作正常,但@typescript-eslint抱怨no-unsafe-call因為 ReactTestInstance 返回的類型聲明: https : //github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react-test-renderer/ index.d.ts —— 具體來說, ReactTestInstance{ [propName: string]: any}

我通常想保留這個規則,所以我想避免對每一行禁用它。

我可以為ReactTestInstance創建一個類型定義,但是當我這樣做時,我也會得到“屬性props類型不兼容”。 如果我使用鑄造也是如此。

有沒有辦法覆蓋庫類型? 除此之外,還有其他建議可以以這種方式處理不安全類型嗎?

這里最好的解決方案可能是將props為正確的類型,而不是將ReactTestInstance轉換為自定義類型。 像這樣:

await (emailInput.props as EmailInputProps).onChangeText('abc'); 

雖然轉換ReactTestInstance是可能的(您只需要首先轉換為unknown ,例如... as unknown as MyCustomType ),但將每個道具轉換為正確的類型將為您提供更准確的整體類型。 無論如何,您可能已經有一種很容易獲得的道具類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM