1
我有一組類有一個相當簡單的字段集:打字稿JSON反序列化接口失蹤方法
interface IQuiz {
name: string;
questions: Question[];
score(): number;
}
export class Quiz implements IQuiz {
name: string;
questions: Question[];
score(): number {
var theScore: number = 0;
this.questions.forEach(question => (theScore += question.value));
return theScore;
}
}
interface IQuestion {
text: string;
value: number;
}
export class Question {
text: string;
value: number;
}
然後我有一些JSON表示這些對象的一些實例。此JSON包含Quiz.name
的值,Quiz.questions
的數組各自具有其text
和value
字段的值。
別的地方,我得已從JSON.parse(json)
創建像下面的代碼這個測驗類的引用:
var json = '{"name": "quizA", "questions": [{"text": "Question A", "value": 0 }, ... ]}'
var quiz = <IQuiz>JSON.parse(json);
// Some other stuff happens which assigns values to each question
var score = quiz.score(); // quiz.score is not a function
看來反序列化對象不實際提供接口的實現。
如何獲得對正確接口實例的引用,以便我可以調用quiz.score()並實際調用該方法?
在表達式之前放置''不會將對象轉換爲該接口的實例。它只是告訴TypeScript編譯器_assume_它是該接口的一個實例。對於您的問題的答案:http://stackoverflow.com/questions/5873624/parse-json-string-into-a-particular-object-prototype-in-javascript –
JLRishe
謝謝,我看到了這個問題,我仍然希望有我想更好的答案。否則,看起來我需要爲每個接受解析對象(或它的屬性)的對象創建一個構造函數,並將它們映射到其中。對於此問題中的對象很簡單,但對於更復雜的對象圖很乏味... – Jaymz