JSDoc 与类型映射的交互

问题描述 投票:0回答:1

我正在寻找有关 TypeScript 的 JSDoc 如何处理类型及其映射和修改的完整信息列表(最好来自“信誉良好的来源”)。

明显的基础是

Pick
Omit
保留初始 JSDoc:

const any: any = {};
type A = {
    /** FOO */ foo: 1,
    /** BAR */ bar: 2
}
let A: A = any;
A.foo
// ^# FOO
let A2: Pick<A, 'foo'> = any;
A2.foo
// ^# FOO
let A3: Omit<A, 'bar'> = any;
A3.foo
// ^# FOO

更高级的情况是映射类型保留 JSDoc:

type B = { [K in keyof A]: false }
let B: B = any;
B.foo
// ^# FOO

因此,我正在寻找可用于 JSDoc 操作的技术的完整列表,以及有关 TS 中的 JSDoc 如何工作的信息,以便更好地理解这些技术。

特别(但不限于):

  • 是否可以将
    { /** foo */ a: 1 }
    转变成
    { /** foo */ b: 1 }
  • 是否可以使用
    function addJsdoc<T, ?>(fnWithoutJsdoc: T): <?<T>>
    包装器添加 JSDoc?

相关:

(Github)/TypeScript: Feature Request: Documented Utility Type #41165 

typescript jsdoc
1个回答
0
投票

Typescript 似乎在使用“完全相同”键时最好地保留文档,而在所有其他情况下都会放弃。所以你对此没有太多控制权。

我想也许按键重新映射就可以做到这一点,但即使在最简单的情况下,注释也会被删除。

这有效:

type B = { [K in keyof A]: false } declare const B: B; B.foo // # FOO

type B = { [K in keyof A as `${K}`]: false }
declare const B: B;
B.foo // no annotation
这里 
K

正在转换为

${K}
,对于字符串属性来说应该完全相同。但仅不直接使用
K
就破坏了注释。

Typescript 只是没有用于访问和管理这些类型注释的 API。

遗憾的是,这意味着您问题的答案是:

是否可以将
{ /** foo */ a: 1 }

转换为 { /** foo */ b: 1 }` ?


没有。

是否可以使用函数
addJsdoc<T, ?>(fnWithoutJsdoc: T): <?<T>>

包装器添加 JSDoc?


没有。

© www.soinside.com 2019 - 2024. All rights reserved.