TypeScript版本: 3.5.2
搜索词: object param
代码:
/**
* Converts a type to a markdown string.
* @param {!Object} [opts]
* @param {boolean} [opts.narrow] Combine type and description.
*/
预期行为:
实际行为:
Playground链接:
相关问题:
TypeScript版本: 3.5.2
搜索词: object param
代码:
/**
* Converts a type to a markdown string.
* @param {!Object} [opts]
* @param {boolean} [opts.narrow] Combine type and description.
*/
预期行为:
实际行为:
Playground链接:
相关问题:
7条答案
按热度按时间y1aodyip1#
解析器仅支持以下用于嵌套类型构建的标记:
object
,Object
,object[]
,Object[]
——由于容易出错,不支持包含Object
作为标记的任何类型。jsdoc或closure的文档中也没有提到支持!Object
,尽管有可能closure确实支持它。a9wyjsp72#
@sandersn i know the parser doesn't support it that's why the issue is there. what do you mean error-prone? you can't add
!
lookup in the parser?!Object
is just same as Object which cannot be null. if anything, your parser is incorrect NOW because null is not destructurable. why close issue.bcs8qyzn3#
Object
在这个结构中是一个语法标记,而不是一个真正的类型。!Object
- 请指出支持它的系统。新代码应该使用多个类型定义、Typescript 自己的对象字面量类型,或者只是在单独的 d.ts 文件中声明类型。
ahy6op9u4#
感谢你的回复,伙计。我理解这个帖子是在typescript仓库中,但它不是关于typescript的,而是关于vscode的。像这样的问题都在这里移动。
我没有描述清楚,是的,闭包确实支持它。唯一的问题出在这里,因为我不能正确地使用闭包。你可以在闭包中有一个原始对象,比如
{ abc: string }
,或者你可以有一个记录。记录是可空的,而原始类型不是。因此,当我将记录作为参数传递时,我必须用!
标记它们为非空,因为否则编译器会给我一个警告。看这里https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System非空类型
fafcakar5#
这是在VSCode中使用JS的正确地方,因为TS也可以处理这些。我在Closure Compiler Service上尝试了一个示例程序,它给了我这个警告:
如果我将实际属性更改为其他内容,例如
now
,但保留JSDoc为narrow
,错误不会改变。这表明闭包忽略了JSDoc。我做错了什么吗?这个版本的闭包不支持嵌套对象类型吗?我粘贴了完整的程序以防链接不起作用。yhived7q6#
是的,我不知道他们正在运行哪个版本的gcc应用程序,但当前的独立(
google-closure-compiler-java
)JAR上没有警告。ttp71kqs7#
在处理 #52370 时,我遇到了类似的问题。我发现的问题是,如果没有类型注解,在使用
@param
注解中的解构功能将不起作用:与Nathan一起查看解析器代码后,这似乎是因为我们只尝试推测性地解析以下
@param
(或@property
) JSDoc标签作为子标签,前提是当前标签具有Object
或Object[]
(以及object
变体)的类型表达式。因此,为了使这种解构注解正常工作,您不能省略类型注解,这可能是您想要做的事情,如果您正在为TypeScript编写注解,因为那时类型注解将无关紧要,而且linter可能会抱怨它们。这与最初报告的问题类似,但在那里问题是类型表达式不匹配Object
或Object[]
。