Tslint: deprecation: Usage of deprecated export aliases are not caught

Created on 1 Mar 2018  路  1Comment  路  Source: palantir/tslint

Bug Report

  • __TSLint version__: 5.9.1
  • __TypeScript version__: 2.6.2
  • __Running TSLint via__: CLI

TypeScript code being linted

export interface IMyActionButton {
  action: string;
  dismissive?: boolean;
  text: string;
}

/** @deprecated Use `IMyActionButton` instead. */
export { IMyActionButton as IFormAction };

with tslint.json configuration:

{
  "rulesDirectory": [
    "node_modules/codelyzer"
  ],
  "rules": {
    "arrow-return-shorthand": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "deprecation": {
      "severity": "warn"
    },
    "eofline": true,
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs",
      "rxjs/Rx"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      {
        "limit": 140,
        "ignore-pattern": "^import |^export {(.*?)}"
      }
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "static-field",
          "instance-field",
          "static-method",
          "instance-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-super": true,
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-use-before-declare": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": true,
    "quotemark": [
      true,
      "single"
    ],
    "radix": true,
    "semicolon": [
      true,
      "always"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "no-output-on-prefix": true,
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true
  }
}

Actual behavior

No warnings are visible when running TSLint inside the project

Might be related to: #3141

Expected behavior

Warnings should be displayed when using that deprecated exports:

const actionList: IFormAction[] = [];
const actionOne = {
  action: 'cancel', text: 'shared.button.cancel', dismissive: true
} as IFormAction;
actionList.push(actionOne);
Not A Bug

Most helpful comment

only declarations can be deprecated. an export statement is no declaration, it just gives an existing declaration another public name.

To deprecate the export you would need something like:

/** @deprecated Use `IMyActionButton` instead. */
export type IFormAction = IMyActionButton;
// or
/** @deprecated Use `IMyActionButton` instead. */
export interface IFormAction extends IMyActionButton {} // tslint:disable-line:no-empty-interface

>All comments

only declarations can be deprecated. an export statement is no declaration, it just gives an existing declaration another public name.

To deprecate the export you would need something like:

/** @deprecated Use `IMyActionButton` instead. */
export type IFormAction = IMyActionButton;
// or
/** @deprecated Use `IMyActionButton` instead. */
export interface IFormAction extends IMyActionButton {} // tslint:disable-line:no-empty-interface
Was this page helpful?
0 / 5 - 0 ratings