You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TypeWriter时如何为特定类型条件性生成方法?

我之前在使用TypeWriter生成TypeScript类时,也踩过条件方法添加的语法坑,给你梳理下正确的写法和问题排查方向:

核心问题:用错了TypeWriter的模板语法

TypeWriter的模板是基于Razor风格的@指令,不是你尝试的$if语法,这是导致两种错误的根本原因:

  • 第一种报错(意外/无效令牌):因为TypeWriter不识别$if,把$当成了非法字符;
  • 第二种输出整个代码块:同样是因为$if不被解析,直接被当作普通文本输出了。

正确的条件方法添加示例

下面给你两个常见场景的正确模板写法,你可以根据自己的需求调整:

场景1:针对包含特定C#类型属性的模型添加方法

比如给所有包含DateTime类型属性的C#模型,自动生成一个日期格式化方法:

export class @(model.Name) {
    // 生成常规属性
    @foreach (var prop in model.Properties) {
        public @(prop.Name): @(prop.Type.TypeScriptName);
    }

    // 条件添加方法:当模型有DateTime类型属性时
    @if (model.Properties.Any(p => p.Type.Name == "DateTime")) {
        // 这里可以根据实际需求写TS方法逻辑
        public formatFirstDate(): string {
            // 取第一个DateTime类型的属性做格式化
            const dateProp = "@(model.Properties.First(p => p.Type.Name == "DateTime").Name)";
            return new Date(this[dateProp]).toLocaleDateString("zh-CN");
        }
    }
}

场景2:针对特定名称的C#模型添加方法

比如只给名为User的C#模型添加一个获取全名的方法:

export class @(model.Name) {
    @foreach (var prop in model.Properties) {
        public @(prop.Name): @(prop.Type.TypeScriptName);
    }

    // 条件:仅当模型名称是User时添加
    @if (model.Name == "User") {
        public getFullName(): string {
            return `${this.firstName} ${this.lastName}`;
        }
    }
}

额外注意事项

  1. 模板内的C#语法要正确:@if后面的表达式是C#代码,比如model.Properties.Any(...)是LINQ方法,TypeWriter默认支持System.Linq,不用额外引用;
  2. 区分C#类型和TS类型:p.Type.Name是C#原类型名(比如DateTime),p.Type.TypeScriptName是生成后的TS类型名(比如Date),别搞混;
  3. 语法闭合要严谨:TypeWriter对模板的语法检查很严格,大括号、引号一定要配对,否则容易触发语法错误。

内容的提问来源于stack exchange,提问作者user47589

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:29