279

VS2013 では、tsc がコード 1 で終了するとビルドが停止します。VS2012 ではそうではありませんでした。

tsc.exe エラーを無視してソリューションを実行するにはどうすればよいですか?

The property 'x' does not exist on value of type 'y'JavaScript関数を使用するときに無視したい多くのエラーが発生します。

4

10 に答える 10

169

迅速かつ汚い解決策は、明示的にキャストすることですany

(y as any).x

「利点」は、キャストが明示的であるため、noImplicitAnyフラグが設定されていてもコンパイルされることです。

適切な解決策は、タイピング定義ファイルを更新することです。

変数を にキャストすると、その変数の型チェックをanyオプトアウトすることに注意してください。


私は免責事項モードにいるのでany、新しいインターフェイスと組み合わせたダブル キャストは、次のような状況で役立ちます。

  • 壊れたtypingsファイルを更新したくない
  • および/またはモンキーパッチを適用している

それでも、なんらかの形式のタイピングが必要です。

ytype のインスタンスの定義にtypeOrginalDefの新しいプロパティxをパッチしたいとしますnumber

const y: OriginalDef = ...

interface DefWithNewProperties extends OriginalDef {
    x: number
}

const patched = y as any as DefWithNewProperties

patched.x = ....   //will compile
于 2015-12-16T14:36:12.340 に答える
41

この問題を処理するには、いくつかの方法があります。このオブジェクトが何らかの外部ライブラリに関連している場合、最善の解決策は、そのライブラリの実際の定義ファイル (素晴らしいリポジトリはこちら) を見つけて参照することです。たとえば、次のようになります。

/// <reference path="/path/to/jquery.d.ts" >

もちろん、これは多くの場合当てはまりません。

型システムを「オーバーライド」したい場合は、次のことを試してください。

declare var y;

これにより、 で必要な電話をかけることができますvar y

于 2013-08-06T16:43:53.967 に答える
23

TypeScript がプロパティ"x"が"y"に存在しないと判断した場合、いつでも "y" を "any" にキャストできます。これにより、"y" で何か ("x" など) を呼び出すことができます。

仮説

(<any>y).x;

実際の例

このコードで、「TS2339: プロパティ '名前' がタイプ '関数' に存在しません」というエラーが発生しました。

let name: string = this.constructor.name;

だから私はそれを修正しました:

let name: string = (<any>this).constructor.name;
于 2017-01-05T20:59:22.510 に答える