describe('Action', () => {
describe('actionCreator', () => {
type DummyActionType = 'FOO' | 'BAR';
interface Point {
readonly x: number;
readonly y: number;
}
it('creates the correct FSA for primitives', () => {
const creator = actionCreator<DummyActionType, number>('FOO');
creator(7).should.deep.equal({ type: 'FOO', payload: 7 });
});
it('creates the correct FSA for objects', () => {
const creator = actionCreator<DummyActionType, Point>('BAR');
creator({ x: 1, y: 3 }).should.deep.equal({
type: 'BAR',
payload: { x: 1, y: 3 },
});
});
});
});
avec la configuration tslint.json
:
{
"defaultSeverity": "error",
"extends": [
// "tslint-microsoft-contrib",
"tslint:recommended",
"tslint-react"
],
"rulesDirectory": [
"./node_modules/tslint-immutable/rules"
],
// additional rules aside from inherited ones
"rules": {
"arrow-parens": [true, "ban-single-arg-parens"],
// possible errors (core TSLint)
"no-switch-case-fall-through": true,
"no-string-throw": true,
// stylistic (core TSLint)
"array-type": [true, "array"],
"interface-name": [true, "never-prefix"],
"no-null-keyword": true,
"no-require-imports": true,
"object-literal-sort-keys": false,
"ordered-imports": [false], // array makes VSCode happy
"quotemark": [true, "single", "jsx-double", "avoid-escape"],
// best practices (core TSLint)
"linebreak-style": [true, "LF"],
"max-file-line-count": [true, 300],
"max-line-length": [true, 100],
"no-magic-numbers": true,
"no-unused-expression": true,
"no-unused-variable": [true, "check-parameters", "react"],
"one-line": [false],
"prefer-const": true,
// functional programming
"no-let": true, // no-var on by default
"no-this": true,
"no-class": true,
"no-new": false, // records?
"readonly-interface": true,
"readonly-indexer": true,
"readonly-array": true,
"no-mixed-interface": true,
// react
"jsx-no-multiline-js": false,
// legal
"file-header": [true, "[+ ]{10,}"]
}
}
Il marque l'alias de type et l'interface comme inutilisés.
src/frontend/actions/Action.test.ts
'DummyActionType' is declared but never used. (no-unused-variable)
15 | describe('Action', () => {
16 | describe('actionCreator', () => {
> 17 | type DummyActionType = 'FOO' | 'BAR';
| ^
18 |
19 | interface Point {
20 | readonly x: number;
'Point' is declared but never used. (no-unused-variable)
17 | type DummyActionType = 'FOO' | 'BAR';
18 |
> 19 | interface Point {
| ^
20 | readonly x: number;
21 | readonly y: number;
22 | }
L'alias de type et l'interface sont utilisés comme arguments génériques et ne doivent pas comporter d'erreurs de charpie.
Ressemble à Microsoft/TypeScript#14953
Mon code effectue une vérification de type, il ne semble donc pas s'agir d'une erreur Typescript. Comme "solution de contournement", j'ai "noUnusedLocals"
et "noUnusedParameters"
activés dans tsconfig, et no-unused-variable
désactivés.
Dans ce fichier
import {buildModel} from '../src/compile/common';
import {FacetModel} from '../src/compile/facet';
import {LayerModel} from '../src/compile/layer';
import {Model} from '../src/compile/model';
import {UnitModel} from '../src/compile/unit';
import {initConfig} from '../src/config';
import {ExtendedSpec, FacetSpec, LayerSpec, normalize, TopLevel, UnitSpec} from '../src/spec';
export function parseModel(inputSpec: TopLevel<ExtendedSpec>): Model {
const spec = normalize(inputSpec);
return buildModel(spec, null, '', initConfig(inputSpec.config));
}
export function parseUnitModel(spec: TopLevel<UnitSpec>) {
return new UnitModel(spec, null, '', initConfig(spec.config));
}
export function parseLayerModel(spec: TopLevel<LayerSpec>) {
return new LayerModel(spec, null, '', initConfig(spec.config));
}
export function parseFacetModel(spec: TopLevel<FacetSpec>) {
return new FacetModel(spec, null, '', initConfig(spec.config));
}
J'obtiens ces erreurs :
ERROR: test/util.ts[7, 9]: 'ExtendedSpec' is declared but never used.
ERROR: test/util.ts[7, 23]: 'FacetSpec' is declared but never used.
ERROR: test/util.ts[7, 34]: 'LayerSpec' is declared but never used.
ERROR: test/util.ts[7, 66]: 'UnitSpec' is declared but never used.
Il semble que tslint pense que les variables dans les génériques ne sont pas utilisées.
C'est assez ennuyeux car je ne peux pas supprimer les importations. Pour l'instant, je dois désactiver l'option de vérification des variables inutilisées.
Je ne pense pas que ce soit https://github.com/Microsoft/TypeScript/issues/14953. @joscha a produit une reproduction propre dans https://github.com/palantir/tslint/issues/2621 où les importations ne sont pas rompues (https://gist.github.com/joscha/6633bae73fb4b143cfb685b2754259c9). Priorité à cela.
Dans ce cas, il y a toujours l'importation de React
(non illustré). Si vous utilisez declare namespace React { class Component<T, U> {} }
place, l'erreur disparaît.
Je rencontre toujours ce problème et no-unused-variable
est toujours inutilisable dans tslint 5. Je suis heureux de vous aider en fournissant des exemples.
Nous vivons encore cela aussi. Voici un dépôt minimal (le plus petit que je puisse trouver):
box.ts :
export class Box<T> {
value: T;
}
box_holder.ts :
import { Box } from './box';
export class BoxHolder<T> {
box: Box<T>;
}
Résultat:
ERROR: src/base/tests/box_holder.ts[3, 24]: 'T' is declared but never used.
Versions :
Fait intéressant, il semble que le nom du module d'importation compte. En prenant l'exemple ci-dessus avec box_holder.ts
important de box.ts
, en renommant box_holder.ts
en quelques noms différents, donne :
bo.ts
: erreur
bo_.ts
: erreur
bow.ts
: erreur
box_.ts
: erreur
box_holder.ts
: erreur
boxa.ts
: pas d'erreur
boy.ts
: pas d'erreur
bx.ts
: pas d'erreur
Je suis venu ici pour ça. Je reçois tout un tas de nouvelles erreurs de charpie du type :
ERROR: src/app/app-state.ts[1, 1]: All imports are unused.
ERROR: src/app/app.component.ts[2, 15]: 'Platform' is declared but never used.
ERROR: src/auth/auth.service.ts[2, 10]: 'Http' is declared but never used.
Tous ces éléments ne sont _pas_ utilisés en tant que variables, mais plutôt des définitions de _type_.
import { AuthState } from '../auth/models/auth-state'; // <-- "All imports are unused"
export declare interface AppState {
auth: AuthState;
}
Cela devrait être corrigé dans typescript@next
maintenant. Pourriez-vous tous le tester ?
Toujours le même problème sur [email protected]
Utilisation de [email protected]
import * as TypeMoq from 'typemoq';
import { MockedMethod } from '../mocking';
import { IComponent } from '../component'; // <-- All imports are unused
import { IComponentFactory } from '../componentfactory';
export class CreateComponentXMethodMock extends MockedMethod<IComponentFactory, IComponent> {
constructor(mock: TypeMoq.IMock<IComponentFactory>) {
super(mock, x => x.createComponentX(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAnyNumber()));
}
}
OK, j'ai réouvert le problème. https://github.com/Microsoft/TypeScript/issues/14953#issuecomment-302101264
corrigé dans TS 2.4
Je vois ceci sans erreur dans tsc
:
interface SurveyAssetLayersProxyProps {
survey: Survey
}
export default class SurveyAssetLayersControl extends React.Component<SurveyAssetLayersProxyProps, void> {
}
Me donne : ERROR: 19:11 no-unused-variable 'SurveyAssetLayersProxyProps' is declared but never used.
@mikew Peut-être que votre tslint
fonctionne avec une version TypeScript différente de votre tsc
?
Je ne savais pas que c'était possible. Les deux sont relatifs au projet, en ./node_modules/.bin/
. Comment ferais-je pour confirmer cela?
Le 2 juin 2017, à 14h52, Andy [email protected] a écrit :
@mikew https://github.com/mikew Peut-être que votre tslint fonctionne avec une version TypeScript différente de celle de votre tsc ?
-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub https://github.com/palantir/tslint/issues/2470#issuecomment-305864709 , ou coupez le fil de discussion https://github.com/notifications/unsubscribe-auth/AAASeRvhBbEUpy0tQwk_wtObSYT9bsndgaC5s
Utiliser un autre tsc
dans tslint
n'est pas vraiment possible... @mikew quelle version exacte de 2.4 nightly utilisez-vous ?
@adidahiya pour le moment, cela ne fonctionne pas parce que vous ne mettez à niveau les deps que dans devDependencies
mais pas dans peerDependencies
. voir ici https://github.com/palantir/tslint/blob/3323ed2b0824a12c8b35c421ebf23c7d17cf788f/package.json#L51. J'espère obtenir la version du correctif dès que possible :sourire:
Ooh, j'ai essayé de supprimer et de réinstaller tslint. Et son tapuscrit imbriqué disparu. Quelque chose ne va pas avec le fil.
je rencontre ce problème avec la v5.6.0
@tolgaek Pourriez-vous fournir un exemple de code ? Quelle est ta version TS ? Pouvez-vous reproduire votre erreur en utilisant l'option de compilation --noUnusedLocals
au lieu de tslint ?
salut @andy-ms J'essayais de recréer ce problème avec un code simple mais l'erreur ne s'afficherait pas alors. Il semble que cette erreur soit due à la complexité de notre application.
De plus, je ne pouvais pas exécuter avec noUnusedLocals
mais j'obtiens l'erreur " error: unknown option `--noUnusedLocals'".
Voici le code sur lequel je vois l'erreur :
import { StepUpProvider } from './step-up.provider';
import { Injectable } from '@angular/core';
import {
Http,
XHRBackend,
RequestOptions,
RequestOptionsArgs,
Response,
Request
} from '@angular/http';
import { Observable } from 'rxjs';
@Injectable()
export class RequestInterceptor extends Http {
constructor(
public backend: XHRBackend,
public defaultOptions: RequestOptions,
private stepUpProvider: StepUpProvider
) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
return this.stepUpProvider.intercept(super.request.bind(this, url, options));
}
}
Dans le fichier ci-dessus, j'obtiens **.ts[8, 3]: 'Response' is declared but never used.
même si Response
est utilisé pour taper la valeur de retour de la fonction request
Je vois cela avec tslint 5.10.0 et tapuscrit 2.9.2. Des idées?
Bip boop ! 👉 TSLint est obsolète 👈 et vous devriez passer à typescript-eslint ! ??
🔒 Ce problème est verrouillé pour éviter d'autres discussions inutiles. Merci! ??
Commentaire le plus utile
Nous vivons encore cela aussi. Voici un dépôt minimal (le plus petit que je puisse trouver):
box.ts :
box_holder.ts :
Résultat:
Versions :