私は同じような問題で苦労しました。私の意見では、これはタイピークの欠陥です。あなたがしたようにキャストをしているとき。または、次のようなサンプルコード:
class User {
name: string;
doConsole(): void {
console.log(`Name: ${this.name}`);
}
}
let userObj = { name: 'jose' };
let user = new User();
Object.assign(user, userObj);
user.doConsole();
doConsoleはキャストされたオブジェクトの関数ではありません。これは生成されたJSです:
var User = (function() {
function User(name) {
this.name = name;
}
User.prototype.doConsole = function() {
console.log("Name: " + this.name);
};
return User;
}());
var userObj = { name: 'jose' };
var user = userObj;
user.doConsole();
ご覧のとおり、キャストを行うときにクラスで準備したプロトタイプ関数は使用していません。 私の代わりにこのような何かをすることでした。
class User {
name: string;
doConsole(): void {
console.log(`Name: ${this.name}`);
}
}
let userObj = { name: 'jose' };
let user = new User();
Object.assign(user, userObj);
user.doConsole();
あなたが発生したJSで見ることができるように、これは、あなたがプロトタイプの機能を使用していることを保証します。だから、基本的に私が言っている何
var User = (function() {
function User() {
}
User.prototype.doConsole = function() {
console.log("Name: " + this.name);
};
return User;
}());
var userObj = { name: 'jose' };
var user = new User();
Object.assign(user, userObj);
user.doConsole();
あなたと同じように動作するはずですが、トランスヒーラーはプロトタイプの関数を使用しないので、動作しません。
私はこれがあなたを助けてくれることを願っています。
ありがとう!Object.assign()を使用して素晴らしい回避策! – Bogdan
喜んで助けてください:) –
素晴らしい回避策!私はprimaraly .netだから私はこのくそに慣れていない。彼らが働いていないとTやのようなものがあると信じるのは難しい –