emi*_*lll 3 google-apps-script typescript clasp
假设我们在 2 个单独的文件中有 2 个简单的 TypeScript 类:
namespace A{
export abstract class ItemBase {
id:number=432;
}
}
Run Code Online (Sandbox Code Playgroud)
///<reference path="B.ts"/>
namespace A{
export class ItemType extends A.ItemBase{}
}
Run Code Online (Sandbox Code Playgroud)
///<reference path="C.ts"/>
let a:A.ItemType=new A.ItemType();
Run Code Online (Sandbox Code Playgroud)
使用扣环推动后一切正常
但是,如果我将 C.ts 文件的名称更改为 AA.ts,则会出现错误:
TypeError: Cannot read property "prototype" from undefined. (row 14, file „AA”).
如果我不实例化 Code.ts 中的 ItemType 类,问题甚至存在。
ts2gas 似乎extends在代码转译过程中没有考虑关键字并将输出的 gs 文件设置为相应的 ts 文件顺序。因此,如果我们在扩展类文件之前命名扩展类文件(按字母顺序),我们会得到一个错误。
在开发过程中,我是否必须注意 ts 文件名的正确顺序?我是否必须附加某种处理 gs 文件加载顺序的机制?当 gs 文件已经被转译时,这对我来说似乎是多余的。转译过程 (ts2gas) 应该处理以 TypeScript 方式使用的正确类扩展策略。如果 ts2gas 可以使用原型将 TypeScript 类转换为 JS OOP,为什么它不能正确处理类扩展?
我想有一些更简单更好的方法。
问题的根本原因之一是运行 Apps 脚本的Rhino v1.7R3 JavaScript 引擎以及.gs构成一个脚本的许多文件的提升方式。
此外,ts2gas库的工作方式(通过独立转译每个源文件)也有一些限制,可能在您的问题中起次要作用。
总而言之,您的脚本实际上是所有.gs文件的串联,按照它们在 Google Apps 脚本编辑器中出现的顺序排列。此顺序通常是每个.gs创建的顺序。当@google/clasp用于将本地文件推送到脚本项目时,此顺序可能会更改为源文件名的字母顺序。
在您的示例中,.gs声明父类必须出现在任何子类声明之前(即提升问题)
为了确保代码的正确排序并避免这种情况,您有以下几种选择:
filepushorder您的选项.clasp.json指定应首先推送哪些文件。(易于设置和维护)编辑
为了说明该filePushOrder选项的用法,我使用您的示例代码设置了一个示例存储库。
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |