如何通过JSDoc在JavaScript中实现TypeScript类型强制转换
解决方案
要在纯JavaScript代码中通过TypeScript的类型校验实现自定义类型转换,你需要调整JSDoc注解的写法,给要转换类型的值外层加括号包裹,正确用法如下:
正确代码示例
/** * @param {{id: string, value: number}} details - object with required properties */ function stringifyObject(details) { return `${details.id}: ${details.value}`; } const testValue = {id: 'no-value'}; // 仅需给要做类型转换的值加一层*括号*即可生效 stringifyObject(/** @type {any} */(testValue));
其他可选方案
- 也可以转换为指定的匹配参数类型,比转
any保留更多类型校验能力:stringifyObject(/** @type {{id: string, value: number}} */(testValue)); - 如果需要直接跳过当前行的所有类型校验,可以使用
@ts-ignore注解(不推荐,会丢失类型安全保障):// @ts-ignore stringifyObject(testValue);
注意事项
- 带括号的
@type注解等价于TypeScript中的as类型断言,TypeScript会做基础的类型兼容校验,如果两个类型完全不存在重叠,依然会抛出类型错误,适合明确知道类型符合要求的场景使用。 - 无括号的内联
@type注解只会作用于变量声明场景,无法在函数传参等表达式场景中生效,这也是你原来写法无效的原因。
内容的提问来源于stack exchange,提问作者Chic
相关产品推荐
相关产品推荐

