我正在寻找有关 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 似乎在使用“完全相同”键时最好地保留文档,而在所有其他情况下都会放弃。所以你对此没有太多控制权。
我想也许按键重新映射就可以做到这一点,但即使在最简单的情况下,注释也会被删除。这有效:
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?
没有。