【问题标题】:JSDoc equivalent to Typescript's `as const`?JSDoc 相当于 Typescript 的 `as const`?
【发布时间】:2021-02-10 00:54:50
【问题描述】:

我在一个旧项目中,该项目太大而无法轻松转换为 Typescript,因此我一直在使用 JSDoc。我无法弄清楚如何在 JSDoc 中复制的 Typescript 功能是使用 as const 来完全键入静态对象的属性名称和值。

// In Typescript
const anObject = {hello: 'world'} as const;
// (type shows as {hello:'world'} instead of {hello:string}

在 JSDoc 中是否有任何等价物?我完全找不到任何可以做到这一点的东西(@readonly@const 不这样做),所以我必须基本上将任何静态对象复制粘贴为能够正确键入这些情况的类型,这当然不是 DRY。

【问题讨论】:

  • 我怀疑它会存在。 as const 是一个 TS 指令,允许您使用运行时代码作为编译时类型。但是,JSDoc 与代码完全分离,尤其是与运行时代码无关。它允许你注释一些东西,但它肯定不具备 TS 的全部灵活性。
  • JSDoc 类型断言在手册typescriptlang.org/docs/handbook/… 中有解释,所以我的猜测是/** @type {const} */ (1),但它不起作用。

标签: typescript types jsdoc


【解决方案1】:

没有。它的开放 GitHub 问题是https://github.com/microsoft/TypeScript/issues/30445,以防你想投票。

Typescript 4.5 将支持它:

const foo = /** @type {const} */ ({x: 1});
const bar = /** @type {const} */ ("baz");

注意括号是必需的;这是强制转换语法,不是普通类型注释。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2022-12-09
    • 2012-12-31
    • 1970-01-01
    • 2016-04-12
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多