VS2013 では、tsc がコード 1 で終了するとビルドが停止します。VS2012 ではそうではありませんでした。
tsc.exe エラーを無視してソリューションを実行するにはどうすればよいですか?
The property 'x' does not exist on value of type 'y'
JavaScript関数を使用するときに無視したい多くのエラーが発生します。
VS2013 では、tsc がコード 1 で終了するとビルドが停止します。VS2012 ではそうではありませんでした。
tsc.exe エラーを無視してソリューションを実行するにはどうすればよいですか?
The property 'x' does not exist on value of type 'y'
JavaScript関数を使用するときに無視したい多くのエラーが発生します。
迅速かつ汚い解決策は、明示的にキャストすることですany
(y as any).x
「利点」は、キャストが明示的であるため、noImplicitAny
フラグが設定されていてもコンパイルされることです。
適切な解決策は、タイピング定義ファイルを更新することです。
変数を にキャストすると、その変数の型チェックをany
オプトアウトすることに注意してください。
私は免責事項モードにいるのでany
、新しいインターフェイスと組み合わせたダブル キャストは、次のような状況で役立ちます。
それでも、なんらかの形式のタイピングが必要です。
y
type のインスタンスの定義にtypeOrginalDef
の新しいプロパティx
をパッチしたいとしますnumber
。
const y: OriginalDef = ...
interface DefWithNewProperties extends OriginalDef {
x: number
}
const patched = y as any as DefWithNewProperties
patched.x = .... //will compile
この問題を処理するには、いくつかの方法があります。このオブジェクトが何らかの外部ライブラリに関連している場合、最善の解決策は、そのライブラリの実際の定義ファイル (素晴らしいリポジトリはこちら) を見つけて参照することです。たとえば、次のようになります。
/// <reference path="/path/to/jquery.d.ts" >
もちろん、これは多くの場合当てはまりません。
型システムを「オーバーライド」したい場合は、次のことを試してください。
declare var y;
これにより、 で必要な電話をかけることができますvar y
。
TypeScript がプロパティ"x"が"y"に存在しないと判断した場合、いつでも "y" を "any" にキャストできます。これにより、"y" で何か ("x" など) を呼び出すことができます。
仮説
(<any>y).x;
実際の例
このコードで、「TS2339: プロパティ '名前' がタイプ '関数' に存在しません」というエラーが発生しました。
let name: string = this.constructor.name;
だから私はそれを修正しました:
let name: string = (<any>this).constructor.name;