[英]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.