import-js/eslint-plugin-import

False positive import/no-deprecated for typescript overloads

Aperta

#1532 aperta il 2 nov 2019

 (13 commenti) (18 reazioni) (0 assegnatari)JavaScript (1549 fork)batch import
bughelp wantedtypescript

Metriche repository

Star
 (5940 stelle)
Metriche merge PR
 (Merge medio 138g 22h) (3 PR mergiate in 30 g)

Descrizione

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..."

Guida contributor