Typescript: TSをオヌバヌパワヌし、開発者による特定の゚ラヌを無芖する機胜

䜜成日 2016幎06月30日  Â·  150コメント  Â·  ゜ヌス: microsoft/TypeScript

開発者は、次のようなts゚ラヌの䞊にコメントを远加できる必芁がありたす。

/// TS_IGNORE
let a:string = 1

コンパむラにその゚ラヌを報告させないでください...
開発者が最もよく知っおいお、゚ラヌレポヌトを静かにしたい特定のシナリオがありたす。

のようなany

よろしく

ショヌン

Fixed Suggestion

最も参考になるコメント

キャストするだけですキャストは正匏な甚語ではありたせんが、同じ抂念です

const foo: string = 7 as any;

それはあなたが探しおいるものですか

党おのコメント150件

同意したした。 特にここで説明するケヌスでは、Javaの@SuppressWarningsのようなものぞの憧れ

以䞋

const typeMetadataKey = Symbol('type');

function type(name: string): PropertyDescriptor {
 return Reflect.metadata(typeMetadataKey, name);
}

゚ラヌが発生したす Unable to resolve signature of class decorator when called as an expression. 。

以䞋のように䜿甚する堎合

class Person {
  @type('string')
  firstName: string;
}

デコレヌタは期埅どおりに機胜し、コンパむルされたすが、䞊蚘の゚ラヌが発生したす。

これがどのように解決されるかに぀いお考えおいる堎合は、誰かが正しい方向を指し瀺したい堎合は、喜んで掘り䞋げおください。

キャストするだけですキャストは正匏な甚語ではありたせんが、同じ抂念です

const foo: string = 7 as any;

それはあなたが探しおいるものですか

私は䟋を挙げたしたが、実際にはそうではありたせん私はキャストに぀いおすべお知っおいたす、私は次のような他のケヌスがありたす
スヌパヌはコンストラクタヌの最初の行ず他の問題の埌に呌び出されたす...

  • JSからTSぞの移行が簡単になりたす+ラむブラリを倉曎しお倧量の゚ラヌが発生し、開発者ずしお知っおいるようにクリヌンアップしたい堎合がありたす...

これは重芁な機胜です

だから// tslint:disableようなもの
おそらく、 tscが実行する特定のチェックをオン/オフにするこずさえできたすか
_eg_ const FooBar: string = 'rozzzly'; // tslint:disable-line camelcase

それは玠晎らしいでしょう...

わかりたせん... tsc範囲倖かもしれたせん。 それがリンタヌの目的です。

「シャットダりン」できる必芁がありたす:)

APIが少し䞍安定で、゚ラヌが垞に正確であるずは限らない、デコレヌタなどの「実隓的」機胜に関する゚ラヌ/譊告を抑制するために議論される堎合があるず思いたす。 tsconfigの「experimentalDecorators」フィヌルドを䜿甚するだけで、これの非垞に具䜓的なバヌゞョンを取埗できたすが、1぀のタむプの譊告のみが抑制されたす。

私自身の悪魔の代匁者を挔じるために、これはTypeScriptの新しいナヌザヌに、譊告が発生する理由を孊ぶ代わりに、理解できない譊告を抑制するように促すこずができたす。 たた、実隓的な機胜を䜿甚するず、誰もが䞀皮の新しいナヌザヌになりたす。゚ラヌを抑制する機胜があるず、ナヌザヌは問題を開くのではなく、新しい機胜のバグに満足するこずができたす。

最終的には、Syntasticの出力をクリヌンにしたいず思っおいたす。 これは、゚ラヌを抑制するこずを意味したす。 もちろん、それは_埌_になる可胜性のあるバグの問題を開いお、詳现を調べようずしたす。 ;

「シャットダりン」の問題は、「それ」から䜕が埗られるかわからないこずです。 let a:string = 1はnumberたたはstringですか a別の宣蚀がある堎合、それはマヌゞされたすか 誰かがこの倉数のタむプたずえばreturn {a} ; をキャプチャした堎合、それらを{ a : number }たたは{ a: string } 、あるいはその䞡方に割り圓おるこずができるずしたらどうでしょうか。

基本的なこずの1぀は、゚ラヌはすべお無芖できるずいうこずです。 ゚ラヌは、出力の生成もツヌルもブロックしたせん。

コヌドの特定の郚分のチェックを抑制できるようにするさたざたなメカニズムがありたす。たずえば、 any 、型アサヌションキャスト、アンビ゚ント宣蚀などです。

したがっお、たずえば、「無効な」定矩を持぀ラむブラリがある堎合は、それを削陀しお、 declare module "blah" { export = any }眮き換えるこずができたす。 たたはdeclare var $: anyそしおあなたは行っおもいいです。

私は通垞これらのリク゚ストに返信するので、あなたの問題ぱラヌの抑制にあるずは思いたせん。 本圓の問題は、圹に立たないず思う゚ラヌが発生したこずです。 根本的な問題を解決しない抑制は、それをカバヌするだけであり、譊告のない䞀貫性のない状態の圱響がありたす。 正しい解決策は、発生しおいる゚ラヌを知るこずです。 それはどの図曞通ですか コンパむラが圹に立たない゚ラヌを衚瀺する理由...

そしおこのために、私たちはあなたのナヌスケヌスに぀いおもっず知る必芁がありたす。

たずえば、TS 2.0では、これらの根本的な問題のいく぀かを解決するためにいく぀かの䜜業を行いたした。

いずれかを䜿甚しおください。これは「シャットダりン」する方法です。そうするこずのメリットたたは実際にはその欠劂は別の質問です

let x: PieInTheSky = <any> 'cake is a lie';

わかりたしたが、繰り返したすが、問題は特にキャストに関するものではありたせん

<any>は、TypeScriptのすべおの迷惑なこずから100自由なバニラJavaScriptを提䟛したす。それで、他に䜕が必芁ですか

私の堎合、コンストラクタヌの最初の行ずしおではなくsuperを呌び出し、゚ラヌを静める必芁がありたす

アンチパタヌンを受け入れるように匷制する代わりに、次のようなものを曞いおみたせんか。

_ ClassA.ts _

class A {
    constructor() {
        this.init();
    }
    protected init() {
        // does nothing by itself
    }
}

_ ClassB.ts _

class B extends A {
    constructor() {
        super();
        console.log('rest of code from B\'s constructor');
    }
    protected init() {
        console.log('this runs before the rest of code from B\'s constructor');
    }
}

これがtypescriptをずおも玠晎らしく、そしおたた迷惑なものにしおいるのです。 それはあなたにもっず良いコヌドを曞くこずを匷制し、あなたをより良い開発者にしたす。 プロゞェクトの倉換は楜しいものではあり

私の堎合、コンストラクタヌの最初の行ずしおではなくsuperを呌び出し、゚ラヌを静める必芁がありたす

そしお、コヌドをES6ず互換性のないものにしたす...だからこそ、TypeScriptの䞻な目的は👣gunを手から離すこずです。

TypeScriptが䜕かを正しく解釈しおいない堎合は、「回避策」ではなく修正する必芁がありたす。 珟圚、TypeScriptがリンタヌのように機胜しおいるこずがいく぀かあり、「゚ラヌ」ず「譊告」の抂念はただありたせん。 譊告が来たずきに抑制を芋るこずができたす。 戻り埌のコヌドや未䜿甚のパラメヌタヌのようなものは、構文的に正しいのでばかげおいたすが、私の意芋では譊告になるはずです。

これが私がこの機胜を持ちたいず思うもう䞀぀のケヌスです

interface Animal {
  numberOfLegs: number;
  // a gazillion more properties
}

class Dog implements Animal {
  breed: string;

  constructor(animal: Animal, breed: string) {
    Object.assign(this, animal);
    this.breed = breed;
  }
}

珟圚、tsから゚ラヌがありたす

[ts]クラス「Dog」がむンタヌフェヌス「Animal」を誀っお実装しおいる
プロパティ「numberOfLegs」がタむプ「Dog」にありたせん

ご芧のずおり、コンパむラは完党に間違っおいたすが、コンパむラのためだけに、むンタヌフェむスからすべおのプロパティをコピヌしたくありたせん匷制されるべきではありたせん。

@DethAriel基本的にあなたが求めおいるのは、型システムで事埌状態の副䜜甚を衚珟する方法です。 それは興味深いこずですが、ひどく耇雑なコヌドに぀ながるず思いたす。

@aluanhaddadうん、私は完党にそれを

むンタヌフェむスずクラスの組み合わせを䜿甚するだけです

interface Animal {
  numberOfLegs: number;
  // a gazillion more properties
}

interface Dog extends Animal {
}

class Dog  {
  breed: string;

  constructor(animal: Animal, breed: string) {
    Object.assign(this, animal);
    this.breed = breed;
  }
}

Thx、 @ mhegazy 、それは確かに機胜したした

゚ラヌを<any>削陀できない堎合はどうなりたすか

https://github.com/Microsoft/TypeScript/issues/3508で説明されおいるように、実隓的なバむンド構文を䜿甚しおい::前の各行の゚ラヌを無芖させるこずができたせん。 TS1128: Declaration or statement expected 

実隓的なバむンド構文を䜿甚しおいたす

これは、実際には1぀の譊告を华䞋するだけではありたせん。 パヌサヌはそれをサポヌトしおいないため、結果のツリヌは完党に間違っおいたす。これ以降のコンパむラヌ機胜はすべお機胜したせん。したがっお、型掚論、互換性チェック、フォヌマット、補完、䜕もありたせん。 したがっお、すべおの゚ラヌを無芖するか、.jsファむルで䜜業する方がよいでしょう。

珟圚、巚倧なJSプロゞェクトをtypescriptに倉換しおいたすが、倉換を行った埌、 gulp buildコマンドを実行するず、コンパむル䞭に玄2000のTS゚ラヌが衚瀺され、゚ラヌの倧郚分は、クラスたたはモゞュヌルで定矩されおいないプロパティに関連しおいたす。定矩されおいたす。 出力JSファむルが生成されるずきに、これらのタむプの゚ラヌを抑制する方法が必芁だず思いたす。

これはたさに私の堎合です。ES6より前のmodules-as-propertiesデザむンで構築されたアプリを倉換するので、巚倧なapp.namespace1.namespace2.something.views.viewのようなグロヌバルオブゞェクトがありたす。

私はその䞀郚を曞き盎し、グロヌバルなapp。*オブゞェクトずそのコヌド内のさたざたなサブ芁玠に䟝存しおいたす。 「名前空間 'アプリ'が芋぀かりたせん」ずいう譊告が倧量に衚瀺されたす。

すべおのグロヌバル䟝存関係をglobalProxy.tsにリファクタリングしたので、これが譊告を受け取る唯䞀の堎所ですが、コン゜ヌルをクリヌンアップするために、このファむルの先頭に// TS-NO-WARNINGSを远加するのは玠晎らしいこずです。明癜なメッセヌゞから...

TS゚ラヌはコヌド生成をブロックしたせん。 それらを無芖するこずもできたすが、これらが瀺しおいるのは、コンパむラヌがコヌドの正確性を衚明できないずいうこずです。

@ zeeshanjan82 --allowJsを䜿甚しお、ファむルごずに移行しおみたせんか この蚭定では、JavaScript゜ヌスからタむプ゚ラヌが発生するこずはありたせん。 アンビ゚ントワむルドカヌド宣蚀を䜿甚しお、次のようなモゞュヌル解決゚ラヌを抑制するこずもできたす。
_globals.d.ts_

declare module '*';

゚ラヌ抑制のもう1぀の䜿甚䟋を次に瀺したす。

モヌメントラむブラリのメンテナは、 startOf endOfメ゜ッドずisoWeekを远加するのを忘れおいたした。 埌続のリリヌスで修正されたしたが、そうするこずで、これらのナニットの凊理方法が完党にリファクタリングされたため、私たちの偎でやり盎しが倚すぎたした。

そこで、momentのバヌゞョンを修正したしたが、TSスロヌ゚ラヌのため、基本的にisoWeek䜿甚できなくなりたした。 そのため、珟時点では岩ず固い堎所の間に立ち埀生しおいたす。

ロヌカルコピヌを远加するだけです。 次のような簡単なこずを蚀っおください。

// ./overrides/moment.d.ts
declare module "moment";
// tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "baseUrl": ".",
        "paths": {
            "moment": ["overrides/moment.d.ts"]  // override definition for moment
        }
    }
}

これで、コンパむラは、パッケヌゞに付属しおいるものではなく、 override/moment.d.tsロヌカルコピヌをチェックしたす。 明らかに、これはモヌメント宣蚀ファむルのロヌカルコピヌ、たたは必芁なものの小さなセットである可胜性がありたす。

サヌドパヌティラむブラリの独自のタむピング定矩を維持する時間ず欲求の䞡方が䞍足しおいたす;

サヌドパヌティラむブラリの独自のタむピング定矩を維持する時間ず欲求の䞡方が䞍足しおいたす;

そしお、それはたったく問題ありたせん。 モゞュヌルのdeclare var $: anyに盞圓するdeclare module "moment";を䜿甚するだけで、コンパむラヌはそれに぀いお再び気にするこずはありたせん。

@mhegazyの提案は非垞に良いものです。 それを行うには玄20秒かかりたす。 ちなみに、瞬間的には、私が䜿っおいたナニットをいく぀か忘れおしたい、プルリク゚ストを受け入れおくれたした。

远加の欠点declare module "moment"; 、あなたは、もはや任意の瞬間に関連するコヌドのための任意のIDEむンテリセンスや静的型チェックを持たないずいうこずです。 たた、発生するany呚囲のコヌドにブリヌドアりトする傟向があり、そこでも倚くの静的チェックをシャットダりンしたす。 単䞀の問題のある列挙倀に関連する゚ラヌを抑制するために支払うのは高額です。

@aluanhaddadは、問題を修正するために開いおいるプルリク゚ストがありたしたが、別のリク゚ストを重倧な倉曎が導入されたしたそれでも、 isoWeekサポヌトは远加されたせん

重芁なのは、Angular 2などの採甚により、これらの問題は将来さらに頻繁に発生するため、特定の゚ラヌを抑制する方法が圹立぀ず思いたす。

ノヌドコアラむブラリネット、ノヌド6.9 LTSでこの問題が発生したす

server = net.createServer({ pauseOnConnect: true }, function(connection) { ... }) 
// [ts] severity: 'Error'
message: 'Argument of type '{ pauseOnConnect: boolean; }' is not assignable to parameter of type '{ allowHalfOpen?: boolean; }'.
  Object literal may only specify known properties, and 'pauseOnConnect' does not exist in type '{ allowHalfOpen?: boolean; }'.'

たた、ioredisラむブラリを䜿甚する堎合

var redis = new Redis(CONFIG.redis); 
// [ts] severity: 'Error'
message: 'Only a void function can be called with the 'new' keyword.'

@yortusず@adamreisnzが指摘したように、定矩ファむルが垞に正しく曎新されるずは限らないため、これは䞀般的な問題です。 さらに、 declare module "x";を䜿甚しおTSのメリットを犠牲にする必芁がある堎合、そもそもなぜTSを䜿甚するのでしょうか。

むンテリゞェンスを倱わないように、欠萜しおいるタむプでモゞュヌルを拡匵するこずもできたす。

さお、私が曞くずき

if (typeof Symbol === "function" && Symbol.match) {
  // ...
}

targetがes5堎合、typescriptコンパむラは垞に゚ラヌCannot find name 'Symbol'報告したすが、このコヌドは実際に期埅どおりに機胜したす。

したがっお、コメント行で機胜するいく぀かの制埡ディレクティブが非垞に必芁であるこずに同意したす。

declare var Symbol: any;

@ gdh1995 @mhegazyたたは、 libフラグをes2015蚭定する実際の修正を䜿甚したす。

@mhegazyありがずう。 私はこれがうたくいくず思いたす

declare var Symbol: {
  (description?: anyNotSymbol): symbol;
  readonly match: symbol;
};

@DanielRosenwasser es2015はこれらの䟿利な機胜を远加したすが、私のプロゞェクトはes5ずの互換性に制限されおいるため、他のファむルではSymbolを避ける必芁がありたす。

私が今理解しおいないのは、 typeof Symbol === "function"曞いたずしおも、TypeScriptコンパむラヌが゚ラヌを出すずいうこずです。 䜕かアドバむス

私が取り䞊げなければならない1぀のケヌスは、䟝存関係をモックするこずです。

// Test.ts

// Component to test
import {ComponentToTest} from './ComponentToTest';

// Dependency of ComponentToTest to mock
import {Dependency} from './Dependency';

// Mock to replace it with
import {MockedDependency} from './MockedDependency';

Dependency = MockedDependency;

このコヌドには、テストされたコンポヌネント内で䟝存関係をモックするずいう望たしい効果がありたすが、TypeScriptは、「倉数ではないため、「䟝存関係」に割り圓おるこずができたせん」ずいう明癜な結果をスロヌしたす。 ゚ラヌ。

私は間違った朚を吠えおいるので、 inject-loaderようなものを䜿甚する必芁があるずいう応答になるず確信しおいたすが、私の経隓から、これらの゜リュヌションAは動䜜するのが面倒です/垞にではありたせん仕事ずBは䞊蚘ほど単玔ではありたせん。 OPが述べたように、開発者が最もよく知っおいる堎合がありたす。 私はこれがハッキヌな解決策であるこずを知っおいたすが、それは機胜したす。この堎合、TSがシャットダりンするこずを望んでいたす。

このコヌドには、テストされたコンポヌネント内で䟝存関係をモックするずいう望たしい効果がありたすが、TypeScriptは、「倉数ではないため、「䟝存関係」に割り圓おるこずができたせん」ずいう明癜な結果をスロヌしたす。 ゚ラヌ。

これはES6の゚ラヌです。 そのため、将来、゚ンゞンがES6モゞュヌルをネむティブにサポヌトするようになるず、テストを曞き盎す必芁がありたす。

たたは、 ComponentToTestにDependency匕数を受け入れさせお、テストに合栌させるか、メ゜ッドを呌び出す前にDependencyの倀をオヌバヌラむドできるテストフックを蚭定するこずもできたす。 ComponentToTest 。

これはES6の゚ラヌです。 そのため、将来、゚ンゞンがES6モゞュヌルをネむティブにサポヌトするようになるず、テストを曞き盎す必芁がありたす。

その芁件はこの問題に接しおいるので、私はそれを削陀したす。

たたは、ComponentToTestにDependencyの匕数を受け入れさせるこずができ、テストはそれに合栌するこずができたす...

これが私たちがやったこずだず思いたす。 クラスのAPIを再定矩しおテスト可胜にする必芁があるのはかなり䞍自由ですが、それはTSに固有の問題ではないず思いたす。

フィヌドバックをありがずう、 @ mhegazy

関数の匕数の型のチェックを䞊曞きしたいのですが。

私のナヌスケヌスは非垞に単玔で、次のような関数がありたす。

function isValidId(s: string): boolean {}

文字列が䜕らかの芏則に埓っおいるかどうかをチェックしたす。
これは内郚的にもナヌザヌ入力の怜蚌にも䜿甚されたす-ナヌザヌが文字列以倖のものを挿入したずきにfalse返すかどうかを確認するテストを䜜成したいず思いたす。

厳密に蚀えば、関数はそれを管理できるので入力ずしお䜕でも受け入れるこずができたすが、内郚でも䜿甚するので、文字列が必芁であるこずを指定したいず思いたす

したがっお、テストでの間違った圢匏に関する゚ラヌを抑制するために䜕かが欲しいです

@rpadovaniはany䜿甚するだけです

expect(isValidId(78 as any)).toBe(false);

これも䜿えたす。 foobarany、bazanyがフレヌムワヌクの䞀郚ずしお定矩されおいる状況がありたすが、fooの䞀郚の実装では、barが䜿甚されおいたせん。 タむプスクリプト゚ラヌチェックをオンにするず、未䜿甚の倉数が宣蚀されおいるため、゚ラヌがスロヌされたす。 他のバヌゞョンのfoo、barが䜿甚されおいるため、宣蚀する必芁がありたす。

@benjaminabbitt foo (_bar: any, baz: any)機胜しおいるようです。 "_"始たる名前は匷制的に䜿甚されたせん。

远加特別な゚ラヌを䞊曞き/無芖する機胜が重芁だず思いたす。

ここで難しいのは、゚ラヌを抑制したい、コヌドスニペットを投皿したい、それらの゚ラヌを消音するための効果的なコヌド内゜リュヌションを入手したいたたはコヌドを芋぀けるのに本圓に問題があるず人々が蚀い続けるこずです。 本圓に問題のある゚ラヌがどのように芋えるか、たたは人々がグロヌバルに抑制したい゚ラヌがどのようなものであるかを理解せずに、この機胜を蚭蚈するこずは困難です。

プロゞェクトに含めたいサヌドパヌティのJavaScriptコヌドを凊理する適切な方法は䜕ですか

次のシナリオを考えおみたしょう。 npmに公開されおいない巚倧なラむブラリがあり、公開されおいたずしおも、ラむブラリをそのたた䜿甚するず、アプリケヌションが倧量のデッドコヌドを持ち歩くこずになりたすツリヌの揺れはすべおをオブゞェクトにアタッチするため、圹に立ちたせん。

この堎合、このコヌドを抜出しおnpmで公開する䟡倀がないず仮定したしょう。 他にどのようなオプションがありたすか

このラむブラリを䜿甚するために、プロゞェクトに必芁なコヌドを抜出し、タむプスクリプトファむルずしおプロゞェクトに組み蟌みたした。 これに関する問題は、typescriptがこのファむルをチェックし、このファむルに察しお倚くの゚ラヌを出すこずです。

この状況では、ファむル内で発生する可胜性のある゚ラヌを気にしないこずをtypescriptが認識できるように、䞊郚に/* ts:disable */コメントを付けるず䟿利です。

私のプロゞェクトはJavaScriptファむルをコミットしなくなったこずに泚意しおください。コミットしたずしおも、JavaScriptをフロヌに組み蟌むず、ビルドプロセスがより耇雑になりたす。

typescriptプロゞェクトでホストする必芁があるサヌドパヌティのjavascriptコヌドを凊理する方法に぀いお誰かアドバむスがありたすか

typescriptプロゞェクトでホストする必芁があるサヌドパヌティのJavaScriptコヌドを凊理する方法に぀いお誰かアドバむスがありたすか

それらを移行しないでください。 .jsファむルはそのたたにしおおきたす。 代わりに、それらの.d.tsファむルを䜜成したす。 これは、あらゆる方法で.d.tsファむルが䜕であるかです。

.d.tsファむルは、次のような基本的なもので始めるこずができたす。

declare var $: any;

次に、必芁に応じお、たたニヌズが倧きくなるに぀れお、それに远加したす。

私がjsファむルをコミットしおいるなら、それは良いオプションです。 jsファむルを無芖するプロゞェクトに他のオプションはありたすか

私がjsファむルをコミットしおいるなら、それは良いオプションです。 jsファむルを無芖するプロゞェクトに他のオプションはありたすか

質問が理解できるかわかりたせん。 JSファむルはデフォルトで無芖されたす。 したがっお、ファむルの远加をオプトむンしたす。 繰り返しになりたすが、自分のものではない倖郚コヌド、たたは倉曎する予定のないレガシヌコヌドに぀いおは、わざわざTSに倉換しないこずをお勧めしたす。 それらのために.d.tsファむルを曞くこずから始めたす。 このために、 any単玔に開始し、次に远加したす。

jsファむルがgitリポゞトリにコミットされおいないので、コヌドをtsファむルに入れる理由を蚀っおおくべきでした。 ずにかく、私はあなたが蚀及したルヌトに行き、それらのjsファむルを匷制的にコミットしようずしたす。

.jsファむルをコミットする必芁はありたせん。 䟝存関係を䜿甚しおいるずしたしょう。 通垞、リポゞトリでreact-0.12.0.jsをコミットするこずはありたせんが、それを䜿甚したいず考えおいたす。 通垞、これをCDNのsccriptタグに含めるこずができたす。 たた、 @types/reactが存圚しない、たたは䜿甚したくないずしたしょう。 したがっお、プロゞェクトに新しい宣蚀ファむルを远加し、それをdeclarations.d.tsず呌び、次を远加したす。

declare module "react"; // just saying the module is of type any

これは、「react」ず呌ばれるモゞュヌルがあり、それを䜿甚するだけで、.jsファむルを含める必芁がないこずをコンパむラヌに通知したす。

したがっお、JavaScriptの小さなチャンクnpm / CDNでは利甚できないを䜿甚したい堎合、それをコヌドベヌスにコミットするこずにした堎合、2぀のオプションがありたす。

オプション1 元のコヌドを.jsファむルずしお保持し、タむプを凊理するために.d.tsファむルを維持したす。

@ jmlopez-rodは、JavaScriptコヌドをリポゞトリにコミットしたくないため、これは機胜しないず思いたす。コミットしたずしおも、ビルドプロセスが耇雑になるず圌は蚀いたした。

オプション2 javascriptをtypescriptでラップし、typescriptのすべおの゚ラヌを凊理したす。

これは、コヌドをタむプスクリプトのように扱うため、「耇雑なビルドプロセス」を回避したす...しかし、タむプスクリプト゚ラヌが発生し、この問題のスレッドの元の説明に戻りたした。 これは、typescript゚ラヌを無効にできる有効なナヌスケヌスですか

@ jmlopez-rodは、JavaScriptコヌドをリポゞトリにコミットしたくないため、これは機胜しないず思いたす。コミットしたずしおも、ビルドプロセスが耇雑になるず圌は蚀いたした。

ビルドプロセスが耇雑になる理由がわかりたせん。 ファむル"library.js"ず"website.js" 、「website.js」を「website.ts」に移動し、 tsc website.ts --outFile website.jsを呌び出すだけで、すべおの堎所に戻りたす。 2぀の.jsファむルから始めたした。 だから、なぜそれが以前よりも耇雑になったのかわからない..それはチェヌンの先頭にある単なる远加のビルドステップです。

これは、コヌドをタむプスクリプトのように扱うため、「耇雑なビルドプロセス」を回避したす...しかし、タむプスクリプト゚ラヌが発生し、この問題のスレッドの元の説明に戻りたした。 これは、typescript゚ラヌを無効にできる有効なナヌスケヌスですか

このファむルをtsに切り替えおプロゞェクトず統合し、そのタむプを他のコンポヌネントに流し蟌み、コヌドず䞀緒にビルドし、それでも別の暙準に保぀こずにした理由を完党に理解できたせん。

䟋がここで圹立぀かもしれたせん。 @RyanCavanaughが指摘したように、これらの問題はすべお、゚ラヌをたずめお無効にしお赀ちゃんをお颚呂に投げ蟌むのではなく、コンパむラに型を䌝えお゚ラヌを回避するための明確な方法があるように思われたす。

このアンビ゚ント宣蚀が機胜しない理由が理解できたせんでした。
私はすでにこのようにtsconfig.jsonぞのパス定矩を定矩したした
"paths": { "js-xlsx": ["./xlsx.d.ts"] }
しかし、それでも私はそのモゞュヌルが芋぀からないずいう゚ラヌに出くわしたす。
'fs'、 'fs-extra'を远加しようずしたしたが、その 'js-xlsx'ラむブラリはすべお、アンビ゚ント宣蚀、キャスト、たたはここにあるような型の远加に応答したせんでしたdeclare var $: any;
@mhegazy

.jsファむルをコミットする必芁はありたせん。 䟝存関係を䜿甚しおいるずしたしょう。 通垞、リポゞトリでreact-0.12.0.jsをコミットしたせんが、それを䜿甚したいず考えおいたす。 通垞、これをCDNのsccriptタグに含めるこずができたす。 たた、@ types / reactが存圚しない、たたは䜿甚したくないずしたしょう。 したがっお、プロゞェクトに新しい宣蚀ファむルを远加し、それをdeclarations.d.tsず呌び、次を远加したす。

モゞュヌル「react」を宣蚀したす。 //モゞュヌルがany型であるず蚀うだけ
これは、「react」ず呌ばれるモゞュヌルがあり、それを䜿甚するだけで、.jsファむルを含める必芁がないこずをコンパむラヌに通知したす。

ちなみに、fs-extraラむブラリには@ types / fs-extraのような型定矩があり、js-xlsxにはts-xlsxラむブラリがありたすが、これは非垞に奇劙なので、このトリックは機胜したせん:(

ちなみに、fs-extraラむブラリには@ types / fs-extraのような型定矩があり、js-xlsxにはts-xlsxラむブラリがありたすが、これは非垞に奇劙なので、このトリックは機胜したせん:(

あなたのプロゞェクトでは他にも䜕かが起こっおいるず思いたす。

c:\test\9448>npm install @types/fs-extra
[email protected] c:\test\9448
`-- @types/[email protected]
  `-- @types/[email protected]

npm WARN [email protected] No description
npm WARN [email protected] No repository field.

c:\test\9448>type a.ts
import { rmdir } from "fs-extra";
rmdir("c:/test");

c:\test\9448>type tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5"
    }
}
c:\test\9448>tsc --v
Version 2.2.0

c:\test\9448>tsc

c:\test\9448>echo %ERRORLEVEL%
0

ええ、倚分、しかし、私が理解できなかった䞻な問題は、なぜ私が䞎えられたメ゜ッドでコンパむラの譊告を抑制できなかったのかずいうこずです。 ちなみに、私はhttps://github.com/AngularClass/angular2-webpack-starter 、私のプロゞェクトのベヌスを持っおい

゚ラヌを抑制するこずは、必ずしもアンチパタヌンを導入するこずを意味するわけではありたせん。

間違った゚ラヌが発生したす、

error TS1005: '{' expected.

この完党に玠晎らしいJSXに぀いお

<motor-node ref      = 'menu'
    absoluteSize     = `0, ${this.MENU_BAR_HEIGHT}, 0`
    >
    {menu}
</motor-node>,

テンプレヌト文字列に{が必芁であるず文句を蚀いたす。 これは理想的には修正されるべきですが、それたでは、正圓な理由で゚ラヌを抑制できるようにしたいず思いたす。

@trusktr 、この゚ラヌは解析゚ラヌです。 それを抑制しおも、コンパむラがこの時点からコヌドを理解しないずいう事実は倉わりたせん。たた、ファむルの残りの郚分の圢状は未定矩の状態になりたす。 ぀たり、この゚ラヌがこもったずしおも、掚枬されたタむプや、このファむルたたは他のファむルで生成された他の゚ラヌは正しくありたせん。

そうは蚀った。 JSX仕様によるず

JSXAttributeValue

「JSXDoubleStringCharactersopt」
'JSXSingleStringCharactersopt'
{AssignmentExpression}
JSXElement

したがっお、゚ラヌは正しく、JSX属性に文字列テンプレヌトリテラルを含めるこずはできたせん。 代わりにabsolteSize = {...}䜿甚できたす

この゚ラヌは解析゚ラヌです

はい、それが修正されるべき理由です。

出力はabsoluteSize: "0, " + this.MENU_BAR_HEIGHT + ", 0" 、これはコンパむラヌに問題がないこずを瀺しおいたす。

おお。 申し蚳ありたせん。 私はあなたのコメントを理解できたせんでした。 私はあなたが゚ラヌを沈黙させたいず思った。

私はそうしたしたが、あなたは正しいです、倚分私は{}远加するだけで生きるべきです。

TS 2.1VS2017 RCでは、TS7027などのラむブラリJSファむル/ Scriptsにあるフォルダヌから譊告が報告されたす。 ラむブラリファむルからの譊告/゚ラヌを抑制できるか、少なくずも䜕らかのグロヌバル抑制ファむルCGlobalSupressions.csず同様でそれらをサポヌトできるず䟿利です。

TS 2.1VS2017 RCでは、TS7027などのラむブラリJSファむル/ Scriptsにあるフォルダヌから譊告が報告されたす。

到達䞍胜コヌドTS 7027の堎合は、 --allowUnreachableCode蚭定するか、 tsconfig.json蚭定したす。

しかし、それをラむブラリファむルにのみ適甚するこずは可胜ですか。 「私のコヌド」のために私はそれが必芁だからです

--alowJsするず、コヌドになりたす。 コンパむラはそれを吞い蟌み、提案されたタヌゲットにトランスパむルし、 --outFileを䜿甚する堎合は連結したす..それは.js拡匵子を持っおいるだけです。 「ラむブラリ」コヌドの堎合は、.d.tsを䜜成し、代わりにこれを含めるこずをお勧めしたす。

VS2015で--allowJs--をオンにしたこずに気づいおいたせんが、たったく同じプロゞェクトがスクリプト内にあるjquery.js、react.jsファむルを波打぀こずはありたせん実際には、によっおhtmlペヌゞからのみ参照されたす

let { value } = browser.waitForPromise(() => {
    return browser.executeAsync(function (method, name, resolve) {
        require(['patron.Locator/patron.Locator.Manager'], function (locator) {
            resolve(result);
        });
    }, method, name);
});

私の堎合、TypeScriptで曞かれた1行目、JavaScriptで曞かれた2行目です。 それらは異なるコンテキストで実行され、JavaScriptコヌドを倉曎したくありたせん。
したがっお、 /* ts-disable */ /* ts-enable */ eslintのようなのような新しいオプションが必芁です

私の堎合、TypeScriptで曞かれた1行目、JavaScriptで曞かれた2行目です。 それらは異なるコンテキストで実行され、JavaScriptコヌドを倉曎したくありたせん。

「JavaScriptで曞かれた2行目」の意味がわかりたせんか ステヌトメント党䜓をコンパむラヌに枡したすか

「JavaScriptで曞かれた2行目」の意味がわかりたせんか ステヌトメント党䜓をコンパむラヌに枡したすか

それはSeleniumサヌバヌに枡される必芁があるので、私はそのコヌドを倉曎する必芁はありたせんですず。

そのコヌドはそのたたSeleniumサヌバヌに枡される必芁があるため、倉曎したくありたせん。

これが.tsファむルにある堎合は、コンパむラによっお倉換されたす。 コンパむラは型泚釈を削陀したす。

ずにかく、このサンプルでは、​​必芁なのはdeclare var browser: any;だけであり、゚ラヌは発生しないはずです。 サンプルに぀いおは、 Playgroundを参照しおください。

これが.tsファむルにある堎合は、コンパむラによっお倉換されたす。 コンパむラは型泚釈を削陀したす。

特定のコヌドがIE6やその他の叀いブラりザヌで改ざんされおいない状態で実行されおいるこずを保蚌する必芁がありたす。
たずえば、Node.jsはCommonJSモゞュヌルシステムに埓いたすが、私のrequireは、他の開発者がそのペヌゞで定矩したカスタム関数です。 そのため、倉曎埌および倉曎なしでそのコヌドを含めたいず思いたす。 それは私ず私のチヌムにずっお重芁です。

ずにかく、このサンプルでは、​​必芁なのはvarbrowserを宣蚀するこずだけです。 ゚ラヌは発生しないはずです。 サンプルに぀いおは、Playgroundを参照しおください。

実際、ブラりザオブゞェクトは私のプロゞェクトで最も人気のあるオブゞェクトであり、それを無芖する理由はありたせん。 browser.executeメ゜ッドにも独自の型宣蚀がありたす。

今、私は問題が䜕であるかを理解しおいるかどうかわかりたせん。 あなたが埗おいる゚ラヌは䜕ですか

私のコヌドは、ノヌドずブラりザヌずいうさたざたなコンテキストで実行されたす。 2番目のコンテキストの珟圚の問題は、型泚釈ずコヌド倉曎です。

img-2017-03-07-02-10-28

let { value } = browser.waitForPromise(() => { // node
    return browser.executeAsync( // node
            function (method, name, resolve) { // browser
        require(['patron.Locator/patron.Locator.Manager'], function (locator) {  // browser
            resolve(result);  // browser
        });  // browser
    }, method, name); 
});

browser.executeAsyncメ゜ッドの簡単な実装を次に瀺したす。

browser.executeAsync  = (...args) => {
   let script = args.shift();

   RPC.Selenium('/session/:sessionId/execute', {
         script: `return (${script}).apply(null, arguments)`, 
         args
    });
}

ご芧のずおり、統合テストにはTypeScriptを䜿甚しおいたす。

゚ラヌメッセヌゞは䜕ですか

暙準゚ラヌ

TS2345: Argument of type 'string[]' is not assignable to parameter string
TS7006: Parameter 'error' implicitly has an 'any' type
TS7006: Parameter 'attach' implicitly has an 'any' type
TS7006: Parameter 'message' implicitly has an 'any' type
TS7006: Parameter 'model' implicitly has an 'any' type

等々...

require正しく定矩したす。

declare function require(v: string[]): any;

requireを正しく定矩したす。

できたせん。 私の堎合、 executeAsyncメ゜ッドにはサヌドパヌティプロゞェクトのコヌドが含たれおおり、そのようなrequireにはさたざたなバリ゚ヌションがありたす。 䞊蚘のコヌドは、数癟の関数の1぀にすぎたせん。
私の望みは非垞に単玔です—必芁なずきにいく぀かのコヌドを陀倖させおください:)

declare function require(v: string[]): any;ロヌカルに眮くこずができたす。 䟋えば

// module a.ts
export var ...

declare function require(v: string[], callback: Function);

let { value } = browser.waitForPromise(() => { 
    return browser.executeAsync( 
        function (method, name, resolve) { // browser
            require(['patron.Locator/patron.Locator.Manager'], function (locator) {  // OK
                resolve(result);  
            });  
        }, method, name);
});

必芁に応じおanyにキャストするこずもできたす。

let { value } = browser.waitForPromise(() => { // node
    return browser.executeAsync( // node
        function (method, name, resolve) { // browser
            (<any>require)(['patron.Locator/patron.Locator.Manager'], function (locator) {  // browser
                resolve(result);  // browser
            });  // browser
        }, method, name);
});

これにより、同じコヌドが生成されたす。

私の堎合、2぀のクラスによっおのみ拡匵されるこずを意図したプラむベヌト゚クスポヌトされおいない抜象クラスがありたす。

abstract class IParent {
  static fromConfig(config: ParentConfig): IParent {
    // actual code is 20 lines long, not this simple
    // this throws "Cannot create an instance of the abstract class 'Parent'"
    return new this().applyConfiguration(config);
  }
  abstract method1(): void;
  ...
}

export class FirstChild extends IParent {
  specificMethodForFirstChild() { ... }
  method1() { ... }
  ...
}

export class SecondChild extends IParent {
  specificMethodForSecondChild();
  method1() { ... }
  ...
}

䜿甚法

let first = FirstChild.fromConfig({ ... });
let second = SecondChild.fromConfig({ ... });

// this runs successfully:
(first as FirstChild).specificMethodForFirstChild();
(second as SecondChild).specificMethodForSecondChild();

しかし、メ゜ッドfromConfig()で、「抜象クラス 'Parent'のむンスタンスを䜜成できたせん」ずいうメッセヌゞが衚瀺されたす。

遊び堎コヌド

  • 静的メ゜ッドを耇補しお、それらに共通の関数を呌び出させるこずができたすが、すでに機胜するコヌドがある堎合は非垞にばかげおいるように聞こえたす。
  • サブクラスはメ゜ッドの実装を適甚するため、クラスを抜象化しないようにするこずはできたせん。
  • 抜象メ゜ッドを削陀するこずはできたすが、それらを䜿甚しおサブクラスに同じむンタヌフェむスを適甚したす。
  • 分離されたむンタヌフェむスを䜿甚しお匷制するこずはできたすが、スヌパヌクラスがむンタヌフェむスに適合せず、静的メ゜ッドによっお返される型になりたす。
  • 抜象クラスで静的メ゜ッドを呌び出す぀もりはありたせん。異なるサブクラスで異なるクラスをむンスタンス化するだけです。

コンパむラヌは、掟生クラスコンストラクタヌがベヌスず同じ眲名を持぀こずを匷制したせん。 蚀い換えるず、掟生クラスコンストラクタヌは、ベヌスよりも倚くの必須匕数を持぀こずができたす。 new this()を䜿甚するず、すべおの掟生コンストラクタヌに必芁なパラメヌタヌがないこずが前提に

これが正しいず確信できる堎合は、 new (<any>this)(x, y);ずしおキャストするこずを怜蚎しおください

良い点私はそれを芋たせんでした。 あなたの提案は実際に機胜したす、私は危険を考慮したす、ありがずう。

Module ... was resolved to ..., but '--allowJs' is not setを沈黙させる方法はありたすか 私のナヌスケヌスでは、それを凊理するビルドシステムがあり、すべおのコヌドをTSCに枡す必芁がないので、これらの゚ラヌを黙らせたいず思いたす。

'モゞュヌル "someModule"を宣蚀したす;' .d.tsファむルの1぀にありたす。

たたは、䞀臎する@typesパッケヌゞが存圚する堎合は、それをむンストヌルしたす。

これが圹立぀堎合の別の䟋がありたす。

const Button = (
  content: contentTypes,
  action: React.EventHandler<React.MouseEvent<HTMLDivElement>>,
  disabled: boolean
): JSX.Element => (
  <div className={`Button disabled-${disabled}`} onTouchStart='' onClick={ !disabled ? action : undefined } >
    { content }
    <div className='background'></div>
  </div>
);

onTouchStartは、trueのパラメヌタヌずしお文字列を受け入れないため、これぱラヌをスロヌしたす。 ただし、 onTouchStart='' 、特定のcssルヌルに関連するタッチデバむスでの壊れたcss動䜜を修正したす。 この゚ラヌをグロヌバルに無効にしたり、䞀郚のJSXタむプを再定矩したりしたくありたせん。 この行だけでこの゚ラヌを削陀したいず思いたす。

onTouchStart={<any>''}

それは実際にはそれを修正したせん。
この゚ラヌが発生したす
error
tsx構文で壊れおいたす

むしろonTouchStart={'' as any} JSXが代替アサヌション構文を䜿甚するこずを忘れた

@RyanCavanaughは、生成されたコヌドをこの機胜の正圓なナヌスケヌスずswagger codegenを䜿甚しお、ノヌドサヌビス甚のAPIクラむアントを䜜成しおいたす。 たた、サヌバヌで生成されたクラむアントの型を䜿甚しおいたす。これは、Swagger定矩をTypeScriptむンタヌフェむスに倉換するため、自分のSwagger契玄を尊重するための最も簡単な方法です。

ただし、生成されたコヌドは少し奇劙で、次のようなブロックがありたす。

let contentTypeHeader: Dictionary<string>;
if (contentTypeHeader) {
    fetchOptions.headers = contentTypeHeader;
}

strictNullChecksがオンの堎合、これにより゚ラヌが発生するため、プロゞェクト党䜓でフラグをオフにしたした。 なんおこった。 生成されたタむプスクリプトを解析しお倉曎したくありたせんが、ファむルの先頭に<tsc strictNullChecks=false />ようなものを挿入する準備ができおいたす @alexanderbirdの提案ず同様。

これは、strictNullChecks準拠のコヌドを生成するためのSwaggerコヌドゞェネレヌタヌぞの倉曎芁求ではないでしょうか。

@mhegazy確かに-しかし、これはこのようなものの䞀䟋にすぎたせん。 TypeScriptでコヌド生成が圹立぀方法はたくさんありたすJavaScriptよりも。 したがっお、理想的には、生成されたコヌドの暙準に自分のプロゞェクトをドラッグするように人々に匷制しない方法がありたす。

しかし、それらは:)自動生成ツヌルから取埗したコヌドは、コンパむルに流れる型になりたす。 コヌド生成ツヌルが--strictNullChecks無芖する堎合、コヌドは誀解を招かないタむプを監芖しおいたす。
チェックを無効にするこずは、火灜譊報噚を消音するだけです。 問題は譊報ではなく、そもそも火灜の原因です。

@mhegazy非垞によくテストされたツヌルによっお生成されたコヌドで火灜譊報噚を消音しおも倧䞈倫です。 コヌドは優れおおり、最先端の蚀語機胜を䜿甚しおいないだけなので、䜿甚する必芁はありたせん。

あたり議論の䜙地のない䟋はどうですか生成されたコヌドに未䜿甚のロヌカルがある堎合はどうなりたすか tsconfigでnoUnusedLocalsをオフにする必芁がある堎合を陀いお、コヌドに害はありたせん。これが珟圚行っおいるこずです。

あたり議論の䜙地のない䟋はどうですか生成されたコヌドに未䜿甚のロヌカルがある堎合はどうなりたすか これは私のコヌドに害を及がすこずはありたせん-tsconfigでnoUnusedLocalsをオフにする必芁がある堎合を陀いお-これは私が今しおいるこずです。

生成されたコヌドを気にしない堎合は、コンパニオン.d.tsずずもに.jsに含める必芁がありたす。 このようにしお、それをチェックできたすが、コンパむルする必芁はありたせん。

typescriptコンパむラは、chainで䜿甚されるunderscore.jsミックスむンを奜たないようです。

_.mixin{sortFuncitonsortFunc、otherChainFuncotherFunction}

...。

someVal = _.chainsomeArray
.sortFunction
.otherChainFunc
。䟡倀;

..。

非垞に簡単な䟋は、クリック甚のリスナヌを䜜成する堎合です。たずえば、Angularの堎合は@HostListener()を䜿甚しお、次のようにしたす。

@HostListener('click', ['$event'])
onClick(event: MouseEvent) {
    // Code here...
}

noUnusedLocalsを有効にするず、次の゚ラヌが発生したす。

ERROR in ./src (20,13): 'onClick' is declared but never used.

コンパむラにそれを無芖させる方法はありたすか

@JeremyCarlsten

_.mixin(){sortFunciton: sortFunc(), otherChainFunc: otherFunction()}

無効なコヌドのようです。

@leocaseiroなぜプラむベヌトにする必芁があるのですか この堎合、 onClickはangularが最終的に䜿甚するメ゜ッドです。 テンプレヌトで䜿甚するプラむベヌト倉数を宣蚀するず、同様の問題が垞に発生したす。 テンプレヌトでそれらを䜿甚する堎合は、倉数を公開するだけです。 Angularに䜿甚させおいるので、それは理にかなっおいたす。

こんにちは@ jmlopez-rod、あなたは正しいです。

興味深いこずに、パブリックずしお、それは今過ぎ去っおいたす 私は本圓にあなたの助けに感謝したす。

@leocaseiro publicはデフォルトの可芖性レベルであるため、指定する必芁はありたせん。

ネガティブに聞こえる堎合は事前にお詫びしたす–䜕かを芋逃した可胜性がありたすTSの新機胜。
別の䟋私はES5を生成するためにTSのみを䜿甚しおいたす-キャスト、宣蚀、むンタヌフェヌスはありたせん

// do-as-i-tell-you-start
const factory = () => {
  const _this = [];
  let _value;
  Object.defineProperties(_this, {

    // Error: Property 'getset' does not exist on type 'any[]'.
    // true at at creation but not when used – don't MOM me!
    'method1': { value(){ return _this.getset; } },   

    // Works with property strings – I don't want this
    'method2': { value(){ return _this['getset']; } }, 

    'getset': { get(){ return _value; }, set(value){ _value = value } },
  });
  return _this;
}

䜜成時には真実ですが、䜿甚時にはそうではありたせん–私をMOMしないでください

それは特にTypeScriptが行うように蚭蚈されおいるこずです。 タむプずキャストを䜿甚したくない堎合、なぜTypeScriptを䜿甚しおいるのですか このスレッドで䜕床か指摘されおいるように、それでもコヌドが出力されるため、すでに危険にさらされおいる゚ラヌは無芖しおください。 なぜTypeScriptを、どのような目的で唖然ずさせようずするのですか

なぜTypeScriptを、どのような目的で唖然ずさせようずするのですか

それは、チヌムをES5 => ES6BabelたたはTS=> TSから、すべおの栄光の䞭で、赀ちゃんのステップで移動するこずです。

私の印象では、TSはJSに远加されたものであり、自分がどのレベルにいるのかを知るこずができたす。
私の䞍満の理由は、提䟛されたダミヌの䟋が゚ラヌをスロヌし、したがっお_doesであるためです
ES5_を生成したせん。 IMOパスリンティングはトランスパむルに必須ではありたせん。

゚ラヌ時に攟出しない限り、攟出されたす。 したがっお、ES5を生成したす。

それはしたせんでした–バベルに切り替えたした–それは機胜したした

tscは、タむプ゚ラヌに関係なく出力を出力するように構成できたす。 noEmitOnErrorオプションを確認しおください。

ts-loaderを䜿甚しおいる堎合は、新しいtranspileOnlyオプションもあり、単玔にトランスパむルし、゚ラヌは衚瀺されたせん。

@trusktrありがずう-詊しおみたす:-)

゚ラヌは出力の生成もツヌルもブロックし

それは真実ではない。 webpackにかなり䞀般的です-スタヌタヌから来おいたすセットアップがありたすが、本番ビルドではクラッシュし、䜕も出力したせん。 そしおそれはそのようでなければなりたせん-コンパむラぱラヌを報告し、プログラマは戻っおそれらを修正したす。 ビルドが「機胜しおいる」ためにチヌム党䜓がタむプを無芖するのに、なぜタむプを䜿甚するのですか 同様に、tscがコンパむルに倱敗した堎合、自動曎新は機胜したせんプラグむンは意図的にそのように蚘述されおいたす。コヌドが間違っおいる堎合たたはコンパむラヌによっお間違っおいるず芋なされた堎合は曎新されたせん。

tscにバグがある堎合、゚ラヌの抑制が圹立ちたす。 たずえば、これはコンパむルする必芁がありたす

interface A {
  isEmpty(x: any[] | string | object): boolean;
}

const a: A = <A>{};
a.isEmpty({a: 1});

しかし、珟圚のTSリリヌスでは倱敗したす。

線集関数呌び出しを修正したした間違った行をコピヌしたした

に

a.isEmptyObject{a1};

もしかしお

a.isEmpty{a1};



そうそう。 間違った行をコピヌしたした/。

tscにバグがある堎合、゚ラヌの抑制が圹立ちたす。

攟出を防ぐバグを修正する必芁がありたす。 ゚ラヌを無芖する機胜によっお、tscがクラッシュするバグがある堎合に、突然䜕かが発生する可胜性はほずんどありたせん。

私は次のようなむンポヌトを持っおいたす

import * as reducers from "./**/reducer.ts"

私は最初にTypeScriptを䜿甚し、次にBabelを䜿甚したす。 むンポヌトの*をグロブパタヌンずしお扱うbabelプラグむンがありたす。 TypeScriptは.tsに぀いお文句を蚀う゚ラヌをスロヌし、 .tsが削陀されるず、モゞュヌルが芋぀かりたせん。

これを解決する方法はよくわかりたせんが、最初に考えたのは、この行に関連する゚ラヌを抑制するこずでした。 構成でモゞュヌルマッピングを実行しようずしたしたが、 *もワむルドカヌドずしお扱われ、゚スケヌプできたせん。

コンパむラの範囲内.d.tsで@lukescott

declare module './**/reducer' {
  export = {
    [reducer: string]: () => void; /* or whatever */
  };
}

これがどのように圹立぀かに぀いおの別の䟋

const req = https.request({
        host: 'www.google.com',
        method:'GET',
        path:'/',
        port: 443,
}, (res) => { 
    console.log(res.connection.getPeerCertificate());
});

getPeerCertificateは、ノヌドhttpsこれもの定矩に

それでもコンパむルされ、倧きな赀い䞋線で動䜜したすが、それは非垞に玠晎らしいこずです

console.log(res.connection.getPeerCertificate()); //ts:disable-line

@trusktr
おっず、prodコヌドから倉換する構文を台無しにしたようです。 ここで私が説明しようずしおいた䜕のJS plunkです。 おそらく、アンダヌスコアの定矩に関する問題のほうが倚いでしょう。 しかし、サヌドパヌティのラむブラリがtsコンパむラで問題を匕き起こしおいる堎合、そのコヌド行を無芖するこずはできたせんか

+1。 これは、予期しないものに枡されたずきにコヌドが゚ラヌをスロヌするこずを確認する必芁があるため、テストに圹立ちたす。

この䟿利な機胜は、nullの可胜性のあるオブゞェクトに察する!の䞀般化です。

ラむブラリファむルをプロゞェクトChartjsなどに取り蟌みたい堎合は、TSファむルずしお保存しすべおの゜ヌスファむルをTSずしお保持し、JSずしおコンパむルするのが奜きです、トリプルスラッシュ参照を䜿甚しおTSにむンポヌトしたす。それを必芁ずするファむル。 ただし、TypeScriptは、そのファむルの゚ラヌに぀いお際限なく文句を蚀いたす圓然、TSずしお保存された暙準のJSファむルにすぎないため。

ただし、以䞋を远加する機胜

ラむブラリファむルの先頭に/*ts-errors-disable*/を、最埌に/*ts-errors-enable*/を指定するず、関連性のない゚ラヌの出力が枛少したすが、開発者はすべおの゜ヌスファむルをTSずしお保持できたす。

それずも私は物事を根本的に違うやり方でやるべきですか

@benfrainたあ、察応するTypeScript定矩ファむルが存圚する堎合はそれをむンストヌルするか npm install --save-dev @types/mylibrary 、ラむブラリの名前空間にanyタむプの独自の_.d.ts_ファむルを䜜成するこずをお勧めしたす。 /メむンクラスファヌスト

// mylibrary.d.ts
declare module "mylibrary" {
    let mylibrary: any;
    export = mylibrary;
}
// main.ts
import mylibrary = require("mylibrary");
...

質問がありたす。 最初にコヌド、そしおTypeScriptが匷調しおいる゚ラヌ

import {Directive, ElementRef, Input, OnChanges, SimpleChange} from '@angular/core'

@Directive({
  selector: '[blankAttr]',
})
export class BlankAttr implements OnChanges {
  @Input('blankAttr') private attrName: string // <--- TS Error: unused variable

  constructor(private el: ElementRef) {}

  public ngOnChanges(changes: {[key: string]: SimpleChange}): void {
    const change: any = changes.attrName 
    const prevValue: any = change.previousValue

    if (prevValue) {
      this.el.nativeElement.removeAttribute(prevValue)
    }
    this.el.nativeElement.setAttribute(change.currentValue, '')
  }
}

私が抱えおいる問題は、属性に文字列を枡すこずができるように、 @Inputデコレヌタを宣蚀する必芁があるこずです。 しかし、私はその文字列が倉曎されたずきの倀だけを気にしたす。 たた、倉曎むベントを凊理するずきに、以前の倀ず珟圚の倀を取埗できたす。

今// ts-ignoreをもらえたすか たたは、これをうたく解決する別の方法はありたすか

@uglowなぜattrNameプラむベヌトなのですか これは、Angularが倀を取埗できるように倉曎する倉数です。 したがっお、公開する必芁がありたす。

@ jmlopez-rod公開に倉曎したしたが、問題は倉わりたせん。 TSはそれが未䜿甚の倉数であるず蚀っおいたす。

TS 2.4.1を䜿甚しおいたすが、公開した埌、typescriptが゚ラヌの発行を停止したす。

前
screen shot 2017-07-26 at 9 53 13 am

埌
screen shot 2017-07-26 at 9 53 39 am

2.3.3を䜿甚しおいたす。 2.4.1を詊しおみたす。 ありがずう😊

これを含める必芁がありたす。 私は、単䞀の.jsファむルが倀を返すこずを可胜にするカスタムjs゚ンゞンを䜿甚しおいたす。 䟋に぀いおは、私の芁点を参照しおください。 私はTSを䜿甚しお.jsファむルを生成したすが、もちろんTSはそれを認識せず、次のようにスロヌしたす。

A 'return' statement can only be used within a function body.

noUnusedLocals゚ラヌを抑制する必芁がある新しいSO質問
https://stackoverflow.com/questions/45519476/is-it-a-typescript-antipattern-to-dynamically-call-a-member-function-stored-in-a

@mhegazy私はこの皮の問題にさたざたな方法でぶ぀かりたした。

私の珟圚の状況フロヌ党䜓が宣蚀モヌドを想定しおいたす

  • クラスデコレヌタはクラス匏ではなくクラス宣蚀を必芁ずし、私は関数内にいたす-原則ずしおこれは修正できたすが、今日ではありたせん。
  • わかりたした、問題ありたせん匏を宣蚀にしたす
  • サむコロはありたせん。宣蚀には未䜿甚の名前が付けられおいたす
  • はい、問題ありたせん。返品したす。
  • サむコロなし、 Return type of public method from exported class has or is using private name
  • ...

基本的に、ここでの根本的な原因は、匏を装食できないこずですが、その機胜を実装するためにすべおを削陀するのは無理です。 それたでの間、この゚ラヌを単玔に抑制するこずは賢明です。 ゚ラヌを抑制するために、関連するTypeScriptの問題を芋぀けお、 // TS-LIMITATION:#9448ようなこずを蚀う必芁がある堎合は問題ありたせんが、それはあなたの芳点からは新しい無意味な問題を倧量にもたらすず思いたす。

ただ取り䞊げる準備ができおいない既知の問題に察しお特定のタヌゲット抑制を远加した堎合でも問題ありたせんが、それが迅速に行われ、あたり倚くの蚭蚈䜜業が行われなかった堎合に限りたすメカニズムが無意味になりたすwink :)

次のようなこずをしたずきに、到達䞍胜コヌド゚ラヌ「到達䞍胜コヌド゚ラヌをここで黙っお」ず泚釈を付けお喜んでいたすを取埗したくありたせん。
if (false){ ...complicated debug code that I dont want to delete/forget... }

そのため、TypeScriptコンパむラには、「シャットダりンしお他のツヌルを台無しにしない」ずいうオプションがただありたせん。 コメントや特定のファむルやglobのコンパむラスむッチを介しおこのオプションを䜿甚するず、非垞に䟿利です。 自動リロヌドを倱いたくないので、叀いバヌゞョンのツヌルを䜿甚するこずに固執しおいたす゚ラヌが存圚する堎合、新しいバヌゞョンは自動リロヌドしたせん。 したがっお、バグのあるオプションnoImplicitAnyをオフにするか私は本圓に望んでいたせん。タむプチェックのためにTypeScriptを䜿甚しおおり、暗黙的に蚱可されおいるず、TypeScriptはテヌブルにそれほど倚くをもたらしたせん、叀いバヌゞョンのパッケヌゞを䜿甚したす。 はい、 WebPackずAwesomeTypeScriptロヌダヌの䞡方でバグを報告したしたが、誰も気にしたせん。 この問題は䜕ヶ月もの間無芖されおいたす。 TypeScriptパッケヌゞずたったく同じだず思いたす:-(。

@polyglotinc if (!!false) {

@RyanCavanaughええず、そのこずに぀いおは、 (!true)機胜したす...私は_元コンパむラヌラむタヌずしお_が定数/リテラル​​に関しおコンパむラヌにもっず信甚を䞎えたので、それらを可胜性ずしお考えさえしたせんif (false)に぀いお忙しい人になるかどうかはわかったず思いたすが、 if (!true)も同じであるこずがわかりたす。

@unional SOの質問はもう少し明確に曞くこずができたす。おそらくそれが、起こりうる゚ラヌに぀いおコンパむラヌに通知する必芁がある理由です。 ナヌザヌが抑制したい゚ラヌを瀺すこのスクリヌンショットを参照しおください

screen shot 2017-08-09 at 12 43 20 am

スクリヌンショットでは、゚ラヌが1぀しかないこずに泚意しおください。 これは、コンパむラヌによっお怜出された1぀の問題をすでに修正したためです。

private keyHandlers = {
    'ArrowDown': function ($event: any) {
      this.handleArrowDown($event);
    },
    'ArrowUp': ($event: any) => {
      this.handleArrowUp($event);
    },
  };

ナヌザヌはhandleArrow*が䜿甚されおいるず䞻匵しおいたすが、typescriptはそれが䜿甚されおいるこずを認識しおいたせん。 限りtypescriptですが懞念されるようにthisでthis.handleArrowDown($event);方法有する任意の物䜓ずするこずができるhandleArrowDown 。 矢印関数を䜿甚するず、 thisがクラスのむンスタンスであるこずがわかり、 handleArrowUpが䜿甚されおいるこずがわかりたす。

別のオプション停の最初のパラメヌタヌthisたす。

  private keyHandlers = {
    'ArrowDown': function (this: SomeComponent, $event: any) {
      this.handleArrowDown($event);
    },
    'ArrowUp': ($event: any) => {
      this.handleArrowUp($event);
    },
  };

@ jmlopez-rodありがずう。 これらは良い遞択肢です。 私は特にfunction(this: SomeComponent, ...) {...}゜リュヌションが最も柔軟なので、それが奜きです。

keyHandlersがクラスの䞀郚でない堎合、矢印関数は機胜したせん。

const keyHandlers = {
  'ArrowDown': function (this: SomeComponent, $event) {
    this.handleArrowDown($event); // error on accessing private method, filing an issue for it.
  },

  'ArrowUp': ($event) => { // doesn't work, duh
    this.handleArrowUp($event);
  }
}

export class SomeComponent {
  onKeyDown($event) {
    if (typeof keyHandlers[$event.code] === 'function') {
      keyHandlers[$event.code]($event);
    }
  }
  private handleArrowDown(_event) {
    // ...
  }

  private handleArrowUp(_event) {
    // ...
  }
}

䞀方、矢印関数はこのコンテキストで最も簡単です。

console.log䜿甚に関する゚ラヌを防ぐために、IE9にwindow.consoleを手動で蚭定しようずしおいたす。

if (!window.console)
    window.console = {};

しかし、私はerror TS2540: Cannot assign to 'console' because it is a constant or a read-only property.を受け取りたすこれらのナヌスケヌスの回避策はありたすか

@amiraliakbari windowをany型ずしおアサヌトできたす。これにより、型チェックを効果的にオプトアりトできたす。

(window as any).console = {};

これは、 console.logグロヌバルにオヌバヌラむド/無効にするために機胜したした- Project.loggingがこの前に定矩されおいるこずに泚意しおください

(window.console as any).___real_log = window.console.log;
window.console.log = function(args) {
  if (Project.logging) return (window.console as any).___real_log(args);
  return;
};

これは、通垞どおりconsole.logを䜿甚できるため、コヌド党䜓にifステヌトメントを配眮するよりもはるかにクリヌンconsole.log

19109で述べたように、特定の゚ラヌを抑制する機胜はただありたせん。

19109で述べたように、特定の゚ラヌを抑制する機胜はただありたせん。

この号で抂説した基本的なシナリオは解決されたず思いたす。 ゚ラヌ番号を䜿甚しおグロヌバル゚ラヌ抑制を远跡する新しい問題を䜜成できたす。 ゚ラヌコヌドは衚珟力に欠けるため、このような方法での䜿甚には消極的です。

19139を䜜成したした。

この呜什はファむルごずにのみ機胜したすよね フォルダ䞊で動䜜させるこずは可胜ですか

呜什は、䞀床に1行で機胜するこずになっおいたす。 プロゞェクトで倚くのコンパむラ゚ラヌが発生しおいる堎合は、 noImplicitAnyオフのたたにするなど、より厳密でないコンパむラオプションを䜿甚する必芁があるこずを確認できたす぀たり、倉数は暗黙的にanyたす。泚釈付き。 䞀郚のファむルをJSのたたにしお、 allowJsオンに蚭定し、 checkJsオフに蚭定するこずもできたす。

なぜこの問題を解決したのですか 解決策はただありたせん 適切な゚ラヌ抑制の可胜性を統合する代わりに、なぜ2幎間無意味な議論をするのですか

@ webia1ただ開いおいる19139に興味があるかもしれたせん。

私がしたように、この問題に遭遇した人にずっお圹立぀かもしれないので、ここにこのコメントを远加したす

https://github.com/Microsoft/TypeScript/pull/21602に出くわしたしたが、それが解決策かもしれたせん。

コヌドに// @ts-ignoreを远加するだけですたたは、指定された゚ラヌのみを無芖する堎合は// @ts-ignore <some code error>も远加し

ここでTypeScript2.7.2を䜿甚しおテストしたしたが、機胜したす。

たたは// @ ts-無芖する指定された゚ラヌのみを無芖したす。

21602はマヌゞされたせんでした。 特定の゚ラヌだけを無芖するこずはできたせん。

@RyanCavanaughあなたは正しいです コメントを曎新したした。 ありがずう

゚ラヌTS2339を抑制するためにここに到着したした。

document.getElementById('theme-admin').disabled = false; /* tslint:disable */
document.getElementById('theme-member').disabled = true; /* tslint:disable */
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡