2016-10-15 7 views
4

私はHTTP APIを持っています。 jsonとしてオブジェクトのセットをロードしています。Typescriptオブジェクトのキャストが動作しません

Typescriptオブジェクトにキャストしたいが、キーワード "as"を使用しても機能しないし、< Type>がオブジェクトの前にもない。

r.forEach(entry => { 
    entry.creationDate = new Date(entry.creationDate.date); 
    entry.creator = <User>entry.creator; 
    return entry; 
}); 

entry.creatorの直後のconsole.logは、通常の「オブジェクト」を出力します。

誰かからアドバイスをいただけますか?

答えて

11

私は同じような問題で苦労しました。私の意見では、これはタイピークの欠陥です。あなたがしたようにキャストをしているとき。または、次のようなサンプルコード:

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(); 

あなたと同じように動作するはずですが、トランスヒーラーはプロトタイプの関数を使用しないので、動作しません。

私はこれがあなたを助けてくれることを願っています。

+0

ありがとう!Object.assign()を使用して素晴らしい回避策! – Bogdan

+0

喜んで助けてください:) –

+0

素晴らしい回避策!私はprimaraly .netだから私はこのくそに慣れていない。彼らが働いていないとTやのようなものがあると信じるのは難しい –

3

Javascript自体は強力なタイピングをサポートしていません。 Typescriptでのみ厳密な型指定を使用できますが、コンパイル時にのみ機能します。実行時にあなたが経験しているのは期待される動作です。バグやコードのエラーではありません。

活字体が提供する優れた機能のいくつかは以下のとおりです

  • は時間のチェックをコンパイルします。あなたの 顧客が行う前に、あなたのコードの潜在的なエラーを検索します。
  • 厳密に型指定されたオブジェクト: オブジェクトの型を指定すると、予期しないリスクを減らすことが期待されます。 結果私の引用と強い型付けhereについての詳細情報の

ソース。

関連する問題