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

TypeScript中是否存在模板字面量类型?代码场景求助

关于TypeScript中Cookie生成函数的类型问题解答

你这里的核心误区是混淆了字符串值和对象结构——createCookie返回的是拼接好的Cookie字符串,它本身并不存在Authorization字段,用any只是绕过了TypeScript的类型检查,并没有解决实际问题。

关于模板字面量类型

TypeScript确实支持模板字面量类型,可以精确描述字符串的格式,比如:

// 定义符合格式的Cookie字符串类型
type AuthorizationCookie = `Authorization=${string}; HttpOnly; Max-Age=${number}`;

然后你可以把createCookie的返回类型指定为这个:

public createCookie(token: Token): AuthorizationCookie {
    return `Authorization=${token.token}; HttpOnly; Max-Age=${token.expiresIn}`;
}

但要注意:这个类型只是让TypeScript确认返回的字符串符合指定格式,并不会让字符串拥有Authorization属性——字符串本身就是纯文本,无法通过.语法访问内部的字段。

正确的解决方案

如果你需要访问Cookie的各个组成部分(比如Authorization的token值、过期时间),正确的做法是先把Cookie的配置封装成对象,再按需转换为字符串:

// 定义Cookie配置的类型
type CookieConfig = {
  name: string;
  value: string;
  httpOnly: boolean;
  maxAge: number;
};

// 生成Cookie配置对象(类型安全,可直接访问属性)
public createCookieConfig(token: Token): CookieConfig {
    return {
        name: 'Authorization',
        value: token.token,
        httpOnly: true,
        maxAge: token.expiresIn
    };
}

// 按需将配置转换为Cookie字符串
public cookieConfigToString(config: CookieConfig): string {
    return `${config.name}=${config.value}; HttpOnly; Max-Age=${config.maxAge}`;
}

这样既保证了类型安全,又能通过config.value、config.maxAge轻松访问各个字段,同时也能生成符合要求的Cookie字符串。

顺便优化createToken的类型(避免用any)

// 替换any类型,明确JWT签名选项的类型
type JwtSignOptions = {
  expiresIn: number;
};

public createToken(user: UserInterface): Token {
    const expiresIn: number = 60 * 60; // 1小时
    const signOptions: JwtSignOptions = {
        expiresIn: expiresIn
    };
    const payload: TokenPayload = {
        _id: user.id
    };
    return { token: jwt.sign(payload, this.privKey, signOptions), expiresIn };   
}

总结

  • 模板字面量类型用于描述特定格式的字符串,但无法赋予字符串对象属性;
  • 永远不要用any规避类型检查,应该用类型建模你的数据结构;
  • 若需操作Cookie的各个组成部分,优先用对象封装,再转换为字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:30:53