我试图在我的打字稿代码库中对
any
非常严格。我正在使用所有 no-unsafe-*
规则,因此我的 .eslintrc.js
包括:
'@typescript-eslint/no-unsafe-argument': 'error',
'@typescript-eslint/no-unsafe-assignment': 'error',
'@typescript-eslint/no-unsafe-call': 'error',
'@typescript-eslint/no-unsafe-member-access': 'error',
'@typescript-eslint/no-unsafe-return': 'error',
但我刚刚被
any
引起的虫子咬了。
假设外部库有以下代码:
type Callback = (x: any) => void;
function invokesCallback(callback: Callback): void {
callback({ thisWill: 'break everything' });
}
然后,在我的代码库中,我有这个:
function appendNumber(value: number) {
someNumbers.push(value);
}
const someNumbers: number[] = [];
invokesCallback(appendNumber);
我在这里没有看到任何(双关语无意的)静态检查错误,我当然愿意!
所以,总而言之,我想知道是否有一个规则,知道回调的类型类似于
(x: any) => void;
,only允许具有此签名的函数作为回调传递:(x: unknown) => void;
plugin:@typescript-eslint/no-explicit-any
禁止显式使用 any
类型。
如果你无法控制
any
那么,唉,不,typescript-eslint 中没有这样的 lint 规则。您可能想要在 typescript-eslint 上提出问题提出建议。