總結一下解決這個錯誤的引起和過程。
錯誤信息:TypeError: Cannot read property ‘prototype’ of undefined
開發語言:TypeScript
編譯後語言:JavaScript
開發工具:LayaAir
今天在調試一個新寫的框架的時候,突然出現這個問題。
一般情況下,出現這個問題,是缺乏相應的js文件,但是看了一下html文件,發現相關的js文件都有配置相應的
<script src="js/test/LoginHelper.js"></script>
<script src="js/legend/laya/Helper.js"></script>
其中Helper是基類。
平時很少遇到這個問題,正常情況下LayaAir這個IDE是會自動幫我們插入一個新寫TS類生成的js文件。
看了一下index.html文件,發現這兩個文件都寫,只是沒有按照繼承關係的順序來。
仔細看了一下其他的js文件,發現都是有按照類的繼承關係來插入js文件的。
同時也關注了一下
<!--jsfile--startTag-->
<!--jsfile--endTag-->
這個標籤段也確實是會自動插入新建的TS類的。對比一下其他類,發現可以之所以亂序了,是因爲TS類採用了泛型的寫法
基類 View
export class View<M extends IModel> extends BasicView<Laya.Sprite,M>
子類LoginView
export class LoginView extends mvc.View<mvc.IModel>
然後嘗試把泛型代碼去掉
export class View extends BasicView
export class LoginView extends mvc.View
結果LayaAir是可以正常地在index.html對這兩個類的js文件進行排序。
如果不能使用泛型,那TypeScirpt的強大功能無疑是減弱很多了。
懷疑是LayaAir IDE的bug,急忙在臘鴨的大羣上反饋下這個問題
結果客服人員回答說暫時還不支持泛型,沒辦法了。
最後的解決方法,是把一些不能排序或者一定是先加載js代碼放在別的標籤,手動排序
<!--jsfile--Custom-->
最後問題得以解決,項目也正常跑起來了