gpt4 book ai didi

javascript - 使用 JSDoc 注释通用 ES6 类

转载 作者:行者123 更新时间:2023-12-04 14:00:40 29 4
gpt4 key购买 nike

我想用 JSDoc 记录一个通用的类似 map 的数据结构。首先要注意这个结构没有扩展Map .

一个更普遍的问题是:如何正确注释通用 ES6 类结构?

考虑以下代码。注释的标记部分在注释中产生错误。

/** @type {MyMap<string, number>} */
// ^^^^^^^^^^^^^^^^^^^^^ [js] Type 'MyMap' is not generic.
const map = new MyMap();

这就是 MyMap的定义:
// @ts-check

/**
* @template K, V
*/
class MyMap {
constructor() {
this._map = new Map();
}
}

我需要做什么才能做到 MyMap算作泛型类型吗?我如何曝光 KV作为结构的泛型类型?

(注意:我使用 Visual Studio Code 通过将 // @ts-check 添加到我的 JavaScript 文件的顶部来验证注释。)

最佳答案

首先,正如问题中所述,@template注释以制作 MyMap类泛型已经正确。下面,MyMap有两种泛型 KeyValue .这些类型可以在类中使用,例如,通过设置实例属性的类型 this._map/** @type {Map<Key, Value>} */等。为了演示,我在 Map.prototype.set 周围添加了两个简单的包装方法。和 Map.prototype.get依赖于这些类型。

// @ts-check

/**
* @template Key, Value
*/
class MyMap {
constructor() {
/** @type {Map<Key, Value>} */ this._map = new Map();
}

/**
* @param {Key} key
* @param {Value} value
*/
set(key, value) {
this._map.set(key, value)
}

/**
* @param {Key} key
* @returns {Value | undefined}
*/
get(key) {
return this._map.get(key)
}
}

/** @type {MyMap<string, number>} */ const map = new MyMap();
map.set('key', 1)
map.get('key')

关于javascript - 使用 JSDoc 注释通用 ES6 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889230/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com