今天編譯項目,出現了一個奇怪的報錯,如下:
E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41531 1> if (file.name.toLowerCase() in sortedMap) 1> ^ 1> RangeError: Maximum call stack size exceeded 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41531:48) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21) 1> at insert (E:\engine\egret-core-3.1.2\tools\lib\typescript\tsclark.js:41534:21)
由於報錯沒有給出詳細的信息,只是大概的可以看出和解析代碼文件進入了死循環相關,最后只能一次次回退提交來調試。
最后找到了問題的所在,這里簡單的記錄一下:
假設我有一個A.ts:
1 class A {} 2 class C extends B {}
還有一個B.ts:
1 class B extends A {}
就會出現這個問題,繼承的一個類如果在其他的文件中,而該文件中的類又繼承了當前文件中的類就會出現這個問題。
找到問題解決方法就多了,可以添加一個C.ts把類C放入,可以將類B放入A.ts文件中,只有避免出現上面的情況即可。