TypeScript基础入门之Javascript文件类型检查(五)
继续上篇文章【TypeScript基础入门之Javascript文件类型检查(四)】
@constructor
编译器根据此属性赋值推断构造函数,但如果添加@constructor标记,则可以更好地检查更严格和更好的建议:
1 | /** |
使用@constructor,在构造函数C中检查它,因此您将获得初始化方法的建议,如果您传递一个数字,则会出错。 如果您调用C而不是构造它,您也会收到错误。
不幸的是,这意味着也可以调用的构造函数不能使用@constructor。
@this
当编译器有一些上下文可以使用时,它通常可以找出它的类型。 如果没有,您可以使用@this显式指定此类型:
1 | /** |
@extends
当Javascript类扩展通用基类时,无处可指定类型参数应该是什么。 @extends标记为该类型参数提供了一个位置:
1 | /** |
请注意,@ extends仅适用于类。 目前,构造函数没有办法扩展一个类。
@enum
@enum标记允许您创建一个对象文字,其成员都是指定的类型。 与Javascript中的大多数对象文字不同,它不允许其他成员。
1 | /** @enum {number} */ |
请注意,@enum与Typescript的枚举完全不同,并且简单得多。 但是,与Typescript的枚举不同,@enum可以有任何类型:
1 | /** @enum {function(number): number} */ |
更多示例
1 | var someObj = { |
已知的模式不受支持
引用值空间中的对象,因为类型不起作用,除非对象也创建类型,如构造函数。
1 | function aNormalFunction() { |
对象文字类型中的属性类型的Postfix等于未指定可选属性:
1 | /** |
如果启用了strictNullChecks,则可空类型仅具有意义:
1 | /** |
非可空类型没有任何意义,并且被视为原始类型:
1 | /** |
与JSDoc的类型系统不同,Typescript只允许您将类型标记为包含null或不包含null。 没有明确的非可空性 - 如果启用了strictNullChecks,则number不可为空。 如果它关闭,则number可以为空。