そのため、コンソールに上記のエラーが表示されます。 _super
(生成された__extends
内)に渡されたときに.js
が未定義であることが原因です。
エラーを再現するために使用できるテストコードを次に示します。
//This is the entirety of the file Test.ts
module Test {
export class Test1 {
public Name: string;
public Number: number;
constructor() {
}
}
}
次に、別のファイルに、そのクラスを継承するクラスがあります:
/// <reference path="Test.ts" />
module Test {
export class Test2 extends Test1 {
constructor() {
super();
}
}
}
<reference path...
は必要ないはずです(必要ではありません)が、それが役立ったかどうかを確認するために追加しました(役に立たなかった)。
ファイルはBundleConfig
を介して正しい順序(Test.ts
、次にTest2.ts
)で含まれます(最適化の有無にかかわらず実行しても効果はありません)。
私は恐らく巨大な初心者ですが、私が台無しにしたことを少しでも手がかりにしています。私がオンラインで発見したこの問題の他のすべての例は、コマンドラインコンパイラを使用して複数のTypeScriptファイルを1つのファイルに結合する人々からのものです。私はそのためにバンドラーを使用していますが、それらを結合しなくても、まったく同じ問題が発生します。
私を助けてください、私は私の知恵の終わりにいます!
要求に応じて、コンパイル済みのjavascript:Test.jsを次に示します。
//This is the entirety of the file Test.ts
var Test;
(function (Test) {
var Test1 = (function () {
function Test1() {
}
return Test1;
})();
Test.Test1 = Test1;
})(Test || (Test = {}));
//# sourceMappingURL=Test.js.map
Test2.js:
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
/// <reference path="Test.ts" />
var Test;
(function (Test) {
var Test2 = (function (_super) {
__extends(Test2, _super);
function Test2() {
_super.call(this);
}
return Test2;
})(Test.Test1);
Test.Test2 = Test2;
})(Test || (Test = {}));
//# sourceMappingURL=Test2.js.map
これが起こっている考えられる理由:
BundleConfig
が正しい順序でファイルを連結していることを4回確認します。これは間違いなくそのエラーの最も一般的な原因です。Test.ts
にトップレベルのexport
ディレクティブがないことを確認します。これにより、ファイルが外部モジュールになり、Test1
が表示されなくなります。それに失敗したら、発行されたJavaScriptを質問に投稿して、問題の原因を診断できるようにしてください。
今日、このエラーが発生しました。 OPシナリオが何であるかはわかりませんが、私のチームの場合は次のとおりです。
dependencies.ts
)Uncaught TypeError: Cannot read property 'prototype' of undefined
を示すコンソールログ__extends
関数を指す呼び出しスタック(たとえば、client.ts
)、依存関係としてインポートするコード内:
// dependencies.ts
import { Injectable } from 'angular2/core';
@Injectable()
export class LocalStorageService extends BaseStorageService {
constructor() {
super(localStorage);
}
}
class BaseStorageService {
constructor(private storage: Storage) {}
// ...
}
そして:
// client.ts
import { Injectable } from 'angular2/core';
import { LocalStorageService } from './dependencies';
@Injectable()
export class AuthStorageService {
constructor(private permanentStorage: LocalStorageService) { }
// ...
} // <-- call stack pointed here with inner '__extends' function
基底クラスbefore派生クラスを定義することで問題が解決しました。すばやく検索して読んだ後、これは既知の(および未解決の)TypeScriptの問題に関連しているようです。 #21 および #1842 。
HTH
HTML上のスクリプトの順序は重要です。
TypeScriptファイルがあるとしますA.ts
抽象クラスとファイルを定義するB.ts
A.tsの抽象クラスを拡張するクラス
エクスポート抽象クラスShipmentsListScopeはIShipmentsListScopeを実装します{
A.ts
:
module app.example{
"use strict";
interface IMyInterface{
// ..
}
export abstract class MyAbstract implements IMyInterface{
// ..
}
}
B.ts
module app.example{
"use strict";
class MyChildClass extends MyAbstract {
// ...
}
}
次に、HTMLで、javascriptが生成されたらスクリプトの順序が正しいことを確認する必要があります。
<script src="/app/example/A.js"></script> <!-- A.js BEFORE -->
<script src="/app/example/B.js"></script>
私は同じ問題を抱えていましたが、export default
ステートメント。修正するには、それらを削除して、必要なアイテムを別の方法でインポートしました。
[〜#〜] before [〜#〜]
A.ts
export default MyClass;
class MyClass { ... }
B.ts
import MyClass from "./A";
class MyClass2 extends MyClass { ... }
[〜#〜] after [〜#〜]
A.ts
export class MyClass { ... }
B.ts
import { MyClass } from "./A";
class MyClass2 extends MyClass { ... }
私の場合、この問題をどのように解決したかをここに残します:TSファイルの上部にある参照を逃しましたが、ビルドにはまったく問題ありませんでしたが、実行時に同じエラーが発生しました。オプションと思われる参照を追加すると、ランタイムの問題が解決しました。