import-js/eslint-plugin-import

False positive import/no-deprecated for typescript overloads

Open

#1,532 opened on Nov 2, 2019

View on GitHub
 (13 comments) (18 reactions) (0 assignees)JavaScript (1,540 forks)batch import
bughelp wantedtypescript

Repository metrics

Stars
 (4,946 stars)
PR merge metrics
 (Avg merge 138d 22h) (3 merged PRs in 30d)

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

Contributor guide