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 },
});
});
});
});
con tslint.json
configuración:
{
"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,}"]
}
}
Marca el alias de tipo y la interfaz como no utilizados.
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 | }
El alias de tipo y la interfaz se utilizan como argumentos genéricos y no deben tener errores de pelusa.
Parece Microsoft / TypeScript # 14953
Mi código realiza una comprobación de tipo, por lo que no parece ser un error de TypeScript. Como "solución alternativa", tengo "noUnusedLocals"
y "noUnusedParameters"
activados en tsconfig, y no-unused-variable
desactivados.
En este archivo
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));
}
Recibo estos errores:
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.
Parece que tslint piensa que las variables en genéricos no se utilizan.
Esto es bastante molesto porque no puedo eliminar las importaciones. Por ahora tengo que deshabilitar la opción para verificar las variables no utilizadas.
No creo que esto sea https://github.com/Microsoft/TypeScript/issues/14953. @joscha produjo una reproducción limpia en https://github.com/palantir/tslint/issues/2621 donde las importaciones no están rotas (https://gist.github.com/joscha/6633bae73fb4b143cfb685b2754259c9). Dar prioridad a esto.
En ese caso, todavía existe la importación de React
(no se muestra). Si usa declare namespace React { class Component<T, U> {} }
lugar, el error desaparece.
Sigo experimentando este problema y no-unused-variable
aún no se puede utilizar en tslint 5. Me complace ayudar proporcionando ejemplos.
Todavía estamos experimentando esto también. Aquí hay un repositorio mínimo (el más pequeño que puedo encontrar):
box.ts:
export class Box<T> {
value: T;
}
box_holder.ts:
import { Box } from './box';
export class BoxHolder<T> {
box: Box<T>;
}
Resultado:
ERROR: src/base/tests/box_holder.ts[3, 24]: 'T' is declared but never used.
Versiones:
Curiosamente, parece que el nombre del módulo de importación importa. Tomando el ejemplo anterior con box_holder.ts
importando desde box.ts
, cambiando el nombre de box_holder.ts
a algunos nombres diferentes, se obtiene:
bo.ts
: error
bo_.ts
: error
bow.ts
: error
box_.ts
: error
box_holder.ts
: error
boxa.ts
: sin error
boy.ts
: sin error
bx.ts
: sin error
Vine aquí para esto. Recibo un montón de nuevos errores de pelusa en la línea de:
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.
Todos ellos _no_ se utilizan como variables, sino como definiciones de _tipo_.
import { AuthState } from '../auth/models/auth-state'; // <-- "All imports are unused"
export declare interface AppState {
auth: AuthState;
}
Esto debería arreglarse en typescript@next
ahora. ¿Podrían probarlo todos?
Sigo experimentando el mismo problema en [email protected]
Usando [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, reabrió el problema. https://github.com/Microsoft/TypeScript/issues/14953#issuecomment -302101264
arreglado en TS 2.4
Veo esto sin un error en tsc
:
interface SurveyAssetLayersProxyProps {
survey: Survey
}
export default class SurveyAssetLayersControl extends React.Component<SurveyAssetLayersProxyProps, void> {
}
Me da: ERROR: 19:11 no-unused-variable 'SurveyAssetLayersProxyProps' is declared but never used.
@mikew ¿ Quizás su tslint
está ejecutando con una versión de TypeScript diferente a su tsc
?
No sabía que era posible. Ambos son relativos al proyecto, en ./node_modules/.bin/
. ¿Cómo puedo confirmar esto?
El 2 de junio de 2017, a las 2:52 p.m., Andy [email protected] escribió:
@mikew https://github.com/mikew ¿ Quizás su tslint se esté ejecutando con una versión de TypeScript diferente a la de su tsc?
-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub https://github.com/palantir/tslint/issues/2470#issuecomment-305864709 , o silencia el hilo https://github.com/notifications/unsubscribe-auth/AAASeRvhBbEUpy0tQwk_wtObSYT9bsndksgaws3spA .
Usar un tsc
en tslint
no es realmente posible ... @mikew ¿ qué versión exacta de 2.4 por la noche estás usando?
@adidahiya por ahora, no funciona porque ustedes solo actualizan los departamentos en devDependencies
pero no en peerDependencies
. ver aquí https://github.com/palantir/tslint/blob/3323ed2b0824a12c8b35c421ebf23c7d17cf788f/package.json#L51. Espero obtener el lanzamiento del parche lo antes posible: sonrisa:
Ooh, intenté quitar y reinstalar tslint. Y su texto mecanografiado anidado desapareció. Algo anda mal con el hilo.
estoy experimentando este problema con v5.6.0
@tolgaek ¿Podría proporcionar un código de muestra? ¿Cuál es tu versión de TS? ¿Puede reproducir su error usando la opción del compilador --noUnusedLocals
lugar de tslint?
hola @ andy-ms Estaba tratando de recrear este problema con un código simple, pero el error no aparecía en ese momento. Parece que este error podría deberse a la complejidad de nuestra aplicación de alguna manera.
Además, no pude ejecutar con noUnusedLocals
pero obtengo el error "error: opción desconocida '--noUnusedLocals'".
Aquí está el código en el que veo el error:
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));
}
}
En el archivo anterior, obtengo **.ts[8, 3]: 'Response' is declared but never used.
Aunque Response
se usa para escribir el valor de retorno de la función request
Estoy viendo esto con tslint 5.10.0 y mecanografiado 2.9.2. ¿Algunas ideas?
🤖 ¡Bip boop! 👉 TSLint está obsoleto 👈 ¡y debería cambiar a mecanografiado-eslint ! 🤖
🔒 Este tema se está bloqueando para evitar más discusiones innecesarias. ¡Gracias! 👋
Comentario más útil
Todavía estamos experimentando esto también. Aquí hay un repositorio mínimo (el más pequeño que puedo encontrar):
box.ts:
box_holder.ts:
Resultado:
Versiones: