- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试提出以下 TypeScript 类型断言函数的 JavaScript+JSDoc 变体:
function typeCheck<T>(value: unknown, type: new () => T) {
if (value instanceof type) {
return value;
}
throw new Error('Invalid type');
}
const maybeButton: unknown = document.createElement('button');
const button = typeCheck(maybeButton, HTMLButtonElement);
我想出了这个,但我遇到了一个错误:
/** @template T */
/** @returns {T} */
export default function check(/** @type {unknown} */ object, /** @type {new () => T} */ type) {
if (object instanceof type) {
/** @type {any} */
const any = object;
/** @type {T} */
const t = any;
return t;
}
throw new Error(`Object ${object} does not have the right type '${type}'!`)
}
错误在调用站点:const button = check(event.currentTarget, HTMLButtonElement);
。 HTMLButtonElement
带有下划线,错误消息显示:
Argument of type '{ new (): HTMLButtonElement; prototype: HTMLButtonElement; }' is not assignable to parameter of type 'new () => T'.
Type 'HTMLButtonElement' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'HTMLButtonElement'.ts(2345)
是否有可能开发这样的 JSDoc 函数,当传递一个 unknown
时,将仅使用 TypeScript 类型干扰和逃逸分析来验证并返回类型为所提供类型的未知对象?
我一般对 JSDoc 不感兴趣,但特别是在 Visual Studio Code 中使用的 JSDoc 和 TypeScript 语言服务在使用 JSDoc 进行类型提示的 JavaScript 项目上工作。
最佳答案
TypeScript Discord 上的某个人帮我找到了答案:
/**
* @template T
* @returns {T}
* @param {unknown} obj
* @param {new () => T} type
*/
export default function assertInstance(obj, type) {
if (obj instanceof type) {
/** @type {any} */
const any = obj;
/** @type {T} */
const t = any;
return t;
}
throw new Error(`Object ${obj} does not have the right type '${type}'!`)
}
关于javascript - JSDoc 中的类型断言函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66677741/
短版: 如果我想从头开始开发一个全新的 jsDoc 模板,我需要阅读哪些内容才能了解 jsDoc 的功能、我的模板必须提供什么接口(interface)以及我可以使用哪些数据? 加长版: 我已经使用
给定一个将回调函数作为参数的 Javascript 函数: var myFunction = function(onSuccess, onFailure) {...} 我如何记录 onSuccess的
我一直看到以下格式的 JSDoc(和之前的 JavaDoc): /** * This is some JSDoc ... * ... and some more */ function
假设我有一个接受一个参数的函数: /** * @summary Some function. * * @since 1.0.0 * * etc. */ function func( a )
所有官方 JSDoc 示例都有简单的文档字符串,如下所示: /** * @param {string} author - The author of the book. */ 问题是,在现实生活中
jsDoc 似乎支持大部分 MD 语法,但是当涉及到突出显示单个保留字或文本时,我找不到可用的标签。 在 MD 语法中,我可以使用 `word`,它会设置灰色背景和不同的字体,这样您就可以清楚地看到它
我正在提供带有 JSDoc 注释的代码示例,其中也包含 JSDoc 注释,如何在不破坏外部注释的情况下转义嵌套的 JSDoc 注释? 我使用的是版本 3.3.0-beta3 例子: /** *
我正在使用 documentation package ,但无法弄清楚如何将它记录为类属性(不是通过 getter 和 setter 定义的)。 下面只为 SomeClass 生成类文档,但省略了 s
请向我解释描述此模块的最佳方式: /** * Common util methods * @module Utils */ var Utils = (/** @lends module:Util
我一直很难让 @borrows 标记在 JSDoc 中工作。我一直在尝试从一个函数中获取文档,并将其作为第二个函数的文档。但我似乎连一个简单的例子都做不到! /** * This is the de
我想设置一个 Grunt 任务来运行 JSDoc。我正在使用 grunt-jsdoc JSDoc npm 页面推荐的。它工作正常,但我不能使用我创建的 jsdoc.json 文件。 { "tags
我仍在学习 js 并试用 Webstorm IDE,它看起来不错(包括跳转到 var/函数声明)。 我可以看到如何让 jsdoc 评论出现的模板,但我没有这方面的经验,正在寻找一个例子来说明如何在评论
我仍在学习 js 并试用 Webstorm IDE,它看起来不错(包括跳转到 var/函数声明)。 我可以看到如何让 jsdoc 评论出现的模板,但我没有这方面的经验,正在寻找一个例子来说明如何在评论
我有两种类型的模块: Require.js 主文件: require.config({ baseUrl: "/another/path", paths: {
是否有任何自然方式或特殊标签将参数类型作为链接? /** * My js app * @module app */ /** * Namespace for MYAPP classes and func
我有一个包含大量选项的函数: /** * Show dialog in a blocking manner. * * @param {object} opts * @param {string
我只需要在包含 .js 文件的 ai 整个目录上运行 jsdoc,我通过发出命令 jsdoc abc.js 对 ubuntu 终端中的单个文件执行此操作,但我需要的是一次将此命令应用于目录中的所有文件
假设我有两个功能,其中一个扩展了另一个。 /** * @abstract * @param {Object} settings * @param {Number} settings.x * @para
/** * @param {String} foo * @param {Number} bar */ 或者 /** * @param {string} foo * @param {numbe
导致JsDoc忽略源链接的最简单方法是什么?我必须定义自己的模板吗? 最佳答案 如果使用默认模板,则使用templates.default.outputSourceFiles设置为false的配置文件
我是一名优秀的程序员,十分优秀!