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 },
});
});
});
});
Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ 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,}"]
}
}
ΠΠ½ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΡΠΈΠΏΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠ°ΠΊ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅.
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 | }
ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΡΠΈΠΏΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ lint.
ΠΠΎΡ ΠΎΠΆΠ΅ Π½Π° Microsoft / TypeScript # 14953
ΠΠΎΠΉ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ Typescript. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Β«ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈΒ» Ρ Π²ΠΊΠ»ΡΡΠΈΠ» "noUnusedLocals"
ΠΈ "noUnusedParameters"
Π² tsconfig, Π° no-unused-variable
Π²ΡΠΊΠ»ΡΡΠΈΠ».
Π ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
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));
}
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
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.
ΠΠΎΡ ΠΎΠΆΠ΅, tslint ΡΡΠΈΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠΌΠΏΠΎΡΡ. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ https://github.com/Microsoft/TypeScript/issues/14953. @joscha ΠΏΡΠΎΠΈΠ·Π²Π΅Π» ΡΠΈΡΡΠΎΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² https://github.com/palantir/tslint/issues/2621, Π³Π΄Π΅ ΠΈΠΌΠΏΠΎΡΡ Π½Π΅ ΠΏΡΠ΅ΡΠ²Π°Π½ (https://gist.github.com/joscha/6633bae73fb4b143cfb685b2754259c9). ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π½Π° ΡΡΠΎΠΌ.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡ React
(Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ). ΠΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ declare namespace React { class Component<T, U> {} }
, ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΡΡΠ΅Π·Π½Π΅Ρ.
Π£ ΠΌΠ΅Π½Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ no-unused-variable
ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² tslint 5. Π― ΡΠ°Π΄ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΡΡΠΈΠΌ. ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΠΏΠΎ (ΡΠ°ΠΌΠΎΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅, ΡΡΠΎ Ρ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ):
box.ts:
export class Box<T> {
value: T;
}
box_holder.ts:
import { Box } from './box';
export class BoxHolder<T> {
box: Box<T>;
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ERROR: src/base/tests/box_holder.ts[3, 24]: 'T' is declared but never used.
ΠΠ΅ΡΡΠΈΠΈ:
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΈΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ box_holder.ts
ΠΈΠ· box.ts
ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ box_holder.ts
Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ
ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ:
bo.ts
: ΠΎΡΠΈΠ±ΠΊΠ°
bo_.ts
: ΠΎΡΠΈΠ±ΠΊΠ°
bow.ts
: ΠΎΡΠΈΠ±ΠΊΠ°
box_.ts
: ΠΎΡΠΈΠ±ΠΊΠ°
box_holder.ts
: ΠΎΡΠΈΠ±ΠΊΠ°
boxa.ts
: Π½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ
boy.ts
: Π½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ
bx.ts
: Π½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ
ΠΡΠΈΡΠ΅Π» ΡΡΠ΄Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ΅Π»ΡΡ ΠΊΡΡΡ Π½ΠΎΠ²ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ lint, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
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.
ΠΡΠ΅ ΡΡΠΎ _Π½Π΅_ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π° ΡΠΊΠΎΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ _ΡΠΈΠΏΠ°_.
import { AuthState } from '../auth/models/auth-state'; // <-- "All imports are unused"
export declare interface AppState {
auth: AuthState;
}
ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π² typescript@next
ΡΠ΅ΠΉΡΠ°Ρ. ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ Π²ΡΠ΅ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ?
ΠΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° [email protected]
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ [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()));
}
}
ΠΠ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. https://github.com/Microsoft/TypeScript/issues/14953#issuecomment -302101264
ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π² TS 2.4
Π― Π²ΠΈΠΆΡ ΡΡΠΎ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΊΠΈ Π² tsc
:
interface SurveyAssetLayersProxyProps {
survey: Survey
}
export default class SurveyAssetLayersControl extends React.Component<SurveyAssetLayersProxyProps, void> {
}
ΠΠ°Π΅Ρ ΠΌΠ½Π΅: ERROR: 19:11 no-unused-variable 'SurveyAssetLayersProxyProps' is declared but never used.
@mikew ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Π°Ρ tslint
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ TypeScript, ΡΠ΅ΠΌ Π²Π°Ρ tsc
?
Π― Π½Π΅ Π·Π½Π°Π», ΡΡΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ±Π° ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π² ./node_modules/.bin/
. ΠΠ°ΠΊ ΠΌΠ½Π΅ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ?
2 ΠΈΡΠ½Ρ 2017 Π³. Π² 14:52 ΠΠ½Π΄ΠΈ [email protected] Π½Π°ΠΏΠΈΡΠ°Π»:
@mikew https://github.com/mikew ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Π°Ρ tslint ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ TypeScript, ΡΠ΅ΠΌ Π²Π°Ρ tsc?
-
ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°Ρ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ.
ΠΡΠ²Π΅ΡΡΡΠ΅ Π½Π° ΡΡΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ Π½Π°ΠΏΡΡΠΌΡΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub https://github.com/palantir/tslint/issues/2470#issuecomment-305864709 ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΊ https://github.com/notifications/unsubscribe-auth/AAASeRvhBbEUpy0tQwk_3bsMvCndObSY
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ tsc
Π² tslint
ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ... @mikew ΠΊΠ°ΠΊΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π΅ΡΡΠΈΡ 2.4
@adidahiya Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ, ΡΠ΅Π±ΡΡΠ°, devDependencies
Π½ΠΎ Π½Π΅ Π² peerDependencies
. ΡΠΌ. Π·Π΄Π΅ΡΡ https://github.com/palantir/tslint/blob/3323ed2b0824a12c8b35c421ebf23c7d17cf788f/package.json#L51. ΠΠ°Π΄Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π»ΠΈΠ· ΠΏΠ°ΡΡΠ° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅: smile:
ΠΠΎΠΎ, Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ tslint. Π Π΅Π³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΈΡΡΠ΅Π·. Π§ΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΠΏΡΡΠΆΠ΅ΠΉ.
Π£ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 5.6.0
@tolgaek ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΊΠΎΠ΄Π°? ΠΠ°ΠΊΠ°Ρ Ρ Π²Π°Ρ Π²Π΅ΡΡΠΈΡ TS? ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ²ΠΎΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° --noUnusedLocals
Π²ΠΌΠ΅ΡΡΠΎ tslint?
ΠΏΡΠΈΠ²Π΅Ρ @ andy-ms. Π― ΠΏΡΡΠ°Π»ΡΡ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΡΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΠ»Π°ΡΡ. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²ΡΠ·Π°Π½Π° ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π’Π°ΠΊΠΆΠ΅ Ρ Π½Π΅ ΠΌΠΎΠ³ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ noUnusedLocals
Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ Β«error: unknown option` --noUnusedLocals 'Β».
ΠΠΎΡ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π²ΠΈΠΆΡ ΠΎΡΠΈΠ±ΠΊΡ:
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));
}
}
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΡΠ°ΠΉΠ»Π΅ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ **.ts[8, 3]: 'Response' is declared but never used.
Ρ
ΠΎΡΡ Response
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ request
Π― Π²ΠΈΠΆΡ ΡΡΠΎ Ρ tslint 5.10.0 ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ 2.9.2. ΠΡΠ±ΡΠ΅ ΠΈΠ΄Π΅ΠΈ?
π€ ΠΠΈΠΏ-Π±ΡΠΏ! π TSLint ΡΡΡΠ°ΡΠ΅Π» π ΠΈ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° typescript-eslint ! π€
π ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π°, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ! π
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΡΡΠΈΠΌ. ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΠΏΠΎ (ΡΠ°ΠΌΠΎΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅, ΡΡΠΎ Ρ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ):
box.ts:
box_holder.ts:
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠ΅ΡΡΠΈΠΈ: