How to disable a ts rule for a specific line?
You can use /* tslint:disable-next-line */
to locally disable tslint. However, as this is a compiler error disabling tslint might not help.
You can always temporarily cast $
to any
:
delete ($ as any).summernote.options.keyMap.pc.TAB
which will allow you to access whatever properties you want.
Edit: As of Typescript 2.6, you can now bypass a compiler error/warning for a specific line:
if (false) { // @ts-ignore: Unreachable code error console.log("hello");}
Note that the official docs "recommend you use [this] very sparingly". It is almost always preferable to cast to any
instead as that better expresses intent.
@ts-expect-error
TypeScript 3.9 introduces a new magic comment. @ts-expect-error
will:
- have same functionality as
@ts-ignore
- trigger an error, if actually no compiler error has been suppressed (= indicates useless flag)
if (false) { // @ts-expect-error: Let's ignore a compile error like this unreachable code console.log("hello"); // compiles}// If @ts-expect-error didn't suppress anything at all, we now get a nice warning let flag = true;// ...if (flag) { // @ts-expect-error // ^~~~~~~~~~~~~~~^ error: "Unused '@ts-expect-error' directive.(2578)" console.log("hello"); }
What do TypeScript developers recommend?
@ts-ignore
and @ts-expect-error
are like a sledgehammer for compile errors. TypeScript developers recommend more fine-grained, narrow-scoped typesystem solutions for most cases:
We added ts-ignore with the intent that it be used for the remaining 5% that can't be suppressed by any existing type system mechanics [...] there should be very very very few
ts-ignore
s in your codebase[.] - microsoft/TypeScript#19139
[...] fundamentally, we believe you shouldn't be using suppressions in TypeScript at all. If it's a type issue, you can cast out of it (that's why
any
, casting, and shorthand module declarations exist). If it's a syntax issue, everything is awful and we'll be broken anyway, so suppressions won't do anything (suppressions do not affect parse errors). - microsoft/TypeScript#19573
Alternatives for question-case
▶ Use any
type
// type assertion for single expressiondelete ($ as any).summernote.options.keyMap.pc.TAB;// new variable assignment for multiple usagesconst $$: any = $delete $$.summernote.options.keyMap.pc.TAB;delete $$.summernote.options.keyMap.mac.TAB;
▶ Augment JQueryStatic
interface
// ./global.d.tsinterface JQueryStatic { summernote: any;}// ./main.tsdelete $.summernote.options.keyMap.pc.TAB; // works
In other cases, shorthand declarations / augmentations are handy utilities to compile modules with no / extendable types. A viable strategy is also to incrementally migrate to TypeScript, keeping not yet migrated code in .js
via allowJs
and checkJs: false
compiler flags.
You can simple use the following just before the line:// @ts-ignore