Tslint: Tidak ada variabel yang tidak digunakan untuk jenis alias dan antarmuka saat digunakan sebagai obat generik.

Dibuat pada 2 Apr 2017  ·  24Komentar  ·  Sumber: palantir/tslint

Laporan Bug

  • __TSLint versi__: 5.0.0
  • __TypeScript versi__: 2.2.2
  • __Menjalankan TSLint melalui__: CLI

Kode TypeScript sedang dilinting

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 },
            });
        });
    });
});

dengan konfigurasi 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,}"]
    }
}

Perilaku sebenarnya

Ini menandai alias tipe dan antarmuka sebagai tidak digunakan.

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 |         }

Perilaku yang diharapkan

Jenis alias dan antarmuka digunakan sebagai argumen umum, dan tidak boleh memiliki kesalahan serat.

P1 Requires Type Checker Fixed Bug

Komentar yang paling membantu

Kami juga masih mengalami ini. Berikut repo minimal (terkecil yang dapat saya temukan):

kotak.ts:

export class Box<T> {
  value: T;
}

box_holder.ts:

import { Box } from './box';

export class BoxHolder<T> {
  box: Box<T>;
}

Hasil:

ERROR: src/base/tests/box_holder.ts[3, 24]: 'T' is declared but never used.

Versi:

  • tslint: 5.1.0
  • naskah: 2.3.0

Semua 24 komentar

Sepertinya Microsoft/TypeScript#14953

Kode saya melakukan typecheck, jadi sepertinya bukan kesalahan TypeScript. Sebagai "solusi", saya mengaktifkan "noUnusedLocals" dan "noUnusedParameters" di tsconfig, dan no-unused-variable dimatikan.

Dalam file ini

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));
}

Saya mendapatkan kesalahan ini:

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.

Sepertinya tslint berpikir bahwa variabel dalam obat generik tidak digunakan.

Ini cukup mengganggu karena saya tidak dapat menghapus impor. Untuk saat ini saya harus menonaktifkan opsi untuk memeriksa variabel yang tidak digunakan.

Saya rasa ini bukan https://github.com/Microsoft/TypeScript/issues/14953 . @joscha menghasilkan repro bersih di https://github.com/palantir/tslint/issues/2621 di mana impor tidak rusak (https://Gist.github.com/joscha/6633bae73fb4b143cfb685b2754259c9). Mengutamakan hal ini.

Dalam hal ini masih ada impor React (tidak ditampilkan). Jika Anda menggunakan declare namespace React { class Component<T, U> {} } sebagai gantinya, kesalahan akan hilang.

Saya masih mengalami masalah ini dan no-unused-variable masih tidak dapat digunakan di tslint 5. Saya senang membantu dengan memberikan contoh.

Kami juga masih mengalami ini. Berikut repo minimal (terkecil yang dapat saya temukan):

kotak.ts:

export class Box<T> {
  value: T;
}

box_holder.ts:

import { Box } from './box';

export class BoxHolder<T> {
  box: Box<T>;
}

Hasil:

ERROR: src/base/tests/box_holder.ts[3, 24]: 'T' is declared but never used.

Versi:

  • tslint: 5.1.0
  • naskah: 2.3.0

Menariknya, tampaknya nama modul pengimpor itu penting. Mengambil contoh di atas dengan box_holder.ts mengimpor dari box.ts , mengganti nama box_holder.ts menjadi beberapa nama berbeda, menghasilkan:

bo.ts : kesalahan
bo_.ts : kesalahan
bow.ts : kesalahan
box_.ts : kesalahan
box_holder.ts : kesalahan
boxa.ts : tidak ada kesalahan
boy.ts : tidak ada kesalahan
bx.ts : tidak ada kesalahan

Datang ke sini untuk ini. Saya mendapatkan banyak kesalahan serat baru di sepanjang baris:

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.

Semua itu _not_ digunakan sebagai variabel, melainkan definisi _type_.

import { AuthState } from '../auth/models/auth-state'; // <-- "All imports are unused"

export declare interface AppState {
  auth: AuthState;
}

Ini harus diperbaiki di typescript@next sekarang. Bisakah kalian mengujinya?

Masih mengalami masalah yang sama pada [email protected]
Menggunakan [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()));
    }
}

tetap di TS 2.4

Saya melihat ini tanpa kesalahan di tsc :

interface SurveyAssetLayersProxyProps {
  survey: Survey
}

export default class SurveyAssetLayersControl extends React.Component<SurveyAssetLayersProxyProps, void> {
}

Memberi saya: ERROR: 19:11 no-unused-variable 'SurveyAssetLayersProxyProps' is declared but never used.

@mikew Mungkin tslint berjalan dengan versi TypeScript yang berbeda dari tsc ?

Saya tidak sadar itu mungkin. Keduanya relatif terhadap proyek, dalam ./node_modules/.bin/ . Bagaimana saya akan mengkonfirmasi ini?

Pada 2 Juni 2017, pukul 14.52, Andy [email protected] menulis:

@mikew https://github.com/mikew Mungkin tslint Anda berjalan dengan versi TypeScript yang berbeda dari tsc Anda?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub https://github.com/palantir/tslint/issues/2470#issuecomment-305864709 , atau nonaktifkan utasnya https://github.com/notifications/unsubscribe-auth/AAASeRvhBbEUpy0tQwk_wtObSYT9bsndJs

Menggunakan tsc di tslint sebenarnya tidak mungkin... @mikew versi 2.4 nightly mana yang Anda gunakan?

@adidahiya untuk saat ini, tidak berfungsi karena kalian hanya mengupgrade deps di devDependencies tetapi tidak di peerDependencies . lihat di sini https://github.com/palantir/tslint/blob/3323ed2b0824a12c8b35c421ebf23c7d17cf788f/package.json#L51. Berharap untuk mendapatkan rilis tambalan ASAP :smile:

Ooh, saya mencoba menghapus dan menginstal ulang tslint. Dan naskah bersarangnya hilang. Ada yang salah dengan benang.

saya mengalami masalah ini dengan v5.6.0

@tolgaek Bisakah Anda memberikan kode sampel? Versi TSnya berapa? Bisakah Anda mereproduksi kesalahan Anda menggunakan opsi kompiler --noUnusedLocals alih-alih tslint?

hai @andy-ms Saya mencoba membuat ulang masalah ini dengan kode sederhana tetapi kesalahan tidak akan muncul. Sepertinya kesalahan ini mungkin disebabkan oleh kerumitan aplikasi kami.

Saya juga tidak dapat menjalankan noUnusedLocals tetapi saya mendapatkan kesalahan " error: unknown option `--noUnusedLocals'".

Inilah kode yang saya lihat kesalahannya:

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));
  }
}

Pada file di atas, saya mendapatkan **.ts[8, 3]: 'Response' is declared but never used. Meskipun Response digunakan untuk mengetik nilai balik dari fungsi request

Saya melihat ini dengan tslint 5.10.0 dan TypeScript 2.9.2. Ada ide?

Bunyi bip! TSLint tidak digunakan lagi dan Anda harus beralih ke TypeScript-eslint ! 🤖

Masalah ini sedang dikunci untuk mencegah diskusi lebih lanjut yang tidak perlu. Terima kasih! 👋

Apakah halaman ini membantu?
0 / 5 - 0 peringkat