import-js/eslint-plugin-import

False positive import/no-deprecated for typescript overloads

Ouverte

#1 532 ouverte le 2 nov. 2019

 (13 commentaires) (18 réactions) (0 personne assignée)JavaScript (1 549 forks)batch import
bughelp wantedtypescript

Métriques du dépôt

Stars
 (5 940 étoiles)
Métriques de merge PR
 (Merge moyen 138j 22h) (3 PRs mergées en 30 j)

Description

Consider this external library I'm consuming:

export declare function doSomethingWith(items: string[]): string;

/** @deprecated Pass arguments in a single array instead `doSomethingWith([a, b, c])` */
export declare function doSomethingWith(...items: string[]): string;

The import/no-deprecated rule currently flags even the proper usages:

import { doSomethingWith } from 'external-library'; // flagged

doSomethingWith('a', 'b', 'c'); // flagged, rightly so
doSomethingWith(['a', 'b', 'c']); // flagged, wrongly so

TSLint's deprecation rule gets it right (not bashing ESLint here at all, just pointing to a working implementation).


Additionally, in the following case:

export declare function doSomethingWith(items: string[]): string;

/** @deprecated Pass arguments in a single array instead `doSomethingWith([a, b, c])` */
export declare function doSomethingWith(...items: string[]): string;

/** @deprecated Please don't use this method anymore, it's actually gonna blow everything up */
export declare function doSomethingWith(unused: number, ...items: string): string;

The deprecation warning displayed is that of the last overloaded method (AFAICT), and it may not make sense.

import { doSomethingWith } from 'external-library'; // "Please don't use this method anymore..."

doSomethingWith('a', 'b', 'c'); // "Please don't use this method anymore..."
doSomethingWith(['a', 'b', 'c']); // "Please don't use this method anymore..."

Guide contributeur