したがって、私はTypewriterを使用して変換されたC#クラスのコンパイルに問題があります。私が以下に示すように生成されたtypescriptは、JS出力の依存関係を必要とするために適切にコンパイルされません。この結果、ブラウザにファイルがたくさん残ってしまいます。Typescript 2.3はVisual StudioでAMDを正しくコンパイルしていませんか?
ここ別のファイルからのインポート文とtypescriptですの一例である - 他のファイルをエクスポートインタフェースとクラスでこのコードと非常によく似ています:あなたは私がそれをここで何が起こっているか理解するのを助けることができる場合
大いに感謝します。
// -- Imports --
import { ChecklistItemState, IChecklistItemState } from './ChecklistItemState';
//
// -- Interface --
export interface IChecklistItem {
itemId: number;
workflowPhaseId: number;
task: string;
description: string;
sortOrder: number;
created: Date;
modified: Date;
state: ChecklistItemState;
}
//
// -- Knockout Class --
export class ChecklistItem {
itemId = ko.observable<number>();
workflowPhaseId = ko.observable<number>();
task = ko.observable<string>();
description = ko.observable<string>();
sortOrder = ko.observable<number>();
created = ko.observable<Date>();
modified = ko.observable<Date>();
state = ko.observable<ChecklistItemState>();
constructor(model: IChecklistItem) {
this.map(model);
}
//
// -- Map Interface to Class --
map(model: IChecklistItem) {
this.itemId(model.itemId);
this.workflowPhaseId(model.workflowPhaseId);
this.task(model.task);
this.description(model.description);
this.sortOrder(model.sortOrder);
this.created(model.created);
this.modified(model.modified);
this.state(model.state);
}
//
// -- Return JSON Model --
getModel() {
return {
itemId: this.itemId(),
workflowPhaseId: this.workflowPhaseId(),
task: this.task(),
description: this.description(),
sortOrder: this.sortOrder(),
created: this.created(),
modified: this.modified(),
state: this.state(),
}
}
//
}
//
あなたはChecklistItemStateは、「状態」としてだけではなくIChecklistItemのインタフェースだけでなく、ChecklistItemのクラスで使用されていることがわかります。それは正しくここに他のコードをコンパイルし、別のあることを示すために
define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//
// -- Knockout Class --
var ChecklistItem = (function() {
function ChecklistItem(model) {
this.itemId = ko.observable();
this.workflowPhaseId = ko.observable();
this.task = ko.observable();
this.description = ko.observable();
this.sortOrder = ko.observable();
this.created = ko.observable();
this.modified = ko.observable();
this.state = ko.observable();
this.map(model);
}
//
// -- Map Interface to Class --
ChecklistItem.prototype.map = function (model) {
this.itemId(model.itemId);
this.workflowPhaseId(model.workflowPhaseId);
this.task(model.task);
this.description(model.description);
this.sortOrder(model.sortOrder);
this.created(model.created);
this.modified(model.modified);
this.state(model.state);
};
//
// -- Return JSON Model --
ChecklistItem.prototype.getModel = function() {
return {
itemId: this.itemId(),
workflowPhaseId: this.workflowPhaseId(),
task: this.task(),
description: this.description(),
sortOrder: this.sortOrder(),
created: this.created(),
modified: this.modified(),
state: this.state(),
};
};
return ChecklistItem;
}());
exports.ChecklistItem = ChecklistItem;
});
//
//# sourceMappingURL=ChecklistItem.js.map
:
あなたは、このコードのコンパイルは./ChecklistItemStateファイルに対して必要声明であろうと想像するだろうが、ここでは、実際のコンパイルされたコードですコンパイルされたJSの "定義"コールを正しく示すコードスニペット。ここ
import { SnakeViewModel } from '../../../Core/classes/SnakeViewModel';
let initModel = {
projId: $("#projId").val(),
wfId: $("#wfId").val()
},
viewModel;
$.post("/ProjectApi/ProjectSnakeView",
initModel,
data => {
if (data != null) {
console.log(data);
var viewModel = new SnakeViewModel(data);
}
});
そして、そのコードのコンパイル出力されます:
define(["require", "exports", "../../../Core/classes/SnakeViewModel"],
function (require, exports, SnakeViewModel_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var initModel = {
projId: $("#projId").val(),
wfId: $("#wfId").val()
}, viewModel;
$.post("/ProjectApi/ProjectSnakeView", initModel, function (data) {
if (data != null) {
console.log(data);
var viewModel = new SnakeViewModel_1.SnakeViewModel(data);
}
});
});
//# sourceMappingURL=snake.js.map
これは私の理解を傷つけています。そこで、なぜ、 'var viewModel = new SnakeViewModel(data);'が未定義に戻ってくるのかを理解する必要があります。SnakeViewModelは、ChecklistItemクラスの構造に似ています。次のステップのアイデアは? – Aquaritek
'viewModel'が未定義のままであれば、あなたが質問を書いたときに焦点を当てたものとは異なる問題です。あなたはそこに非同期コードを扱っています。あなたは 'viewModel'を正しく見ていますか?あなたは 'var viewModel = new SnakeViewModel(data);の後に' console.log' **を直ちに入れてみましたか? 'viewModel'にはどのような値がありますか? 'console.log'は' new'呼び出しの直後に**即座に**重要であり、例えばあなたのモジュールの最後にはありません。 (私は 'viewModel'を2回定義しています:モジュールの外側のスコープとコールバックにあります) – Louis
Title対Camelの問題でした - Uugh ...今私のKO観測可能性がわかりました唯一のレベルの深...ここでは、SnakeViewModelの下位レベルの各オブジェクトをトラバースしてインスタンス化する手順を説明します:)。私自身の心の笑いで雑草から私を得ることに感謝します。 – Aquaritek