如何使用JSDoc注释向TypeScript编译器声明“类型X具有类型Y的所有属性以及这些其他属性”?
鉴于:
/**
A base type with one property.
@typedef {object} Base
@prop {string} name
*/
/**
A subtype that adds a second property.
@typedef AugmentedBase
@type {Base}
@prop {number} age
*/
/**
A function declared to return AugmentedBase, so name + age.
@returns {AugmentedBase}
*/
const shouldReturnAugmentedBase = () => {
return {name: 'a', age: 3}
}
当:我通过运行以下命令进行打字检查:
tsc --allowJs --checkJs --noEmit index.js
然后:我希望在检查TypeScript时不会出现错误。
但是:事实上,从这个错误判断,它似乎忽略了由AugmentedBase添加的属性,并将其仅视为Base
错误TS2322:Type“{name:string;age:number;}”
不可分配给类型
“Base”
。
对象字面量只能指定已知属性,
'age'
在类型'Base'
中不存在。
请注意,尽管有一个
@返回{AugmentedBase}
注释,但对象文字并不匹配!
原因:我正在用Visual Studio代码编写JavaScript,并希望充分利用其TypeScript linting。
你不能这样做,而不是以tsc实际会提供线索的方式。
tsc
(至少从2.9.2开始)仅支持在base@type
声明为对象
或对象[]
时将@Property
s附加到@typedef
名称。
此时在编译器/解析器中使用@typedef{NotObject}MyType语法时,可以看到它显式跳过任何属性。ts:parseTypedefTag()。
如果您试图变得聪明,而是将
@type
decl放在所有@Property
decl之后,例如:
/**
@typedef MyType
@property {string} x
@type NotObject
*/
然后,TypeScript编译器将成功解析出所有属性,只是故意忽略它们,而在编译器/解析器中稍晚一点说“MyType的类型只是直接向上的NotAnObject”。ts:parseTypedefTag()。
我最近盯着Kotlin看,有Java的经验。在Java中,我们可以声明与在parent中同名的字段。当我在中这样做时,它给出错误的成员。我错过了什么?
问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。
正如在 声明性映射 ,声明式样式包括生成映射 Table 对象,或容纳 Table 或其他 FromClause 直接对象。 以下示例假定声明性基类为: from sqlalchemy.orm import declarative_base Base = declarative_base() 下面的所有示例都说明了从上面继承的类 Base . 装饰风格 使用修饰符的声明性映射(无声明基) 下面的
我是网络开发新手,所以这可能是非常基本的。如果datainfo prop变量不是空的,我想向div标记添加一个数据属性 但是现在,如果datavalue是空的,则data属性会添加一个空值。相反,我希望它根本不会出现在div标签中。 我可以在JSX子句中添加整个内容吗?
我已经在Jenkins上创建了一个基本的声明性管道。当我运行构建时,它会抛出以下错误 Jenkins服务器使用最新版本的默认插件设置为默认。Jenkinsfile如下所示 当Jenkins读取Jenkinsfile时,看起来块失败了,这在Jenkinsfile看起来很混乱。