typescript-tutorial
typescript-tutorial copied to clipboard
原始数据类型
https://ts.xcatliu.com/basics/primitive-data-types.html
当定义个方法为空值Void时,该方法内写return时编译会报错"Type '"void"' is not assignable to type 'void'",但依然会编译成功
javascript 中 null 不是表示空值吗?ts 中 viod 表示不是任何类型,而 undefined 或者 null 是所有类型的子类型,所以 viod 类型的变量只能赋值为 undefined 或者 null。在 ts 中 viod 主要用法是定义一个没有返回值的函数吧
// 这样不会报错
let num: number = undefined;
实际上测试会报错 error TS2322: Type 'undefined' is not assignable to type 'number'.
声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null: //会报错 不能将类型“null”分配给类型“void” let unusable: void = null; //不会报错 let unusable: void = undefined;
文档描述与实际使用确实有出入,正如其他评论提到的;也没看到作者回应或者勘误,到这里就不敢继续往下看了....
@Hishengs 不同的 tsconfig.json
配置会产生不同的报错等级。这里的代码是基于 tsconfig.json
中配置 strict: false
的(写此书的时候 false
是其默认值),所以可能与你测试的结果不一致。
今在评论区做出说明,后面会全书订正为使用 script: true
并做出解释。
@JnathanCoder
// 这样不会报错 let num: number = undefined;
实际上测试会报错 error TS2322: Type 'undefined' is not assignable to type 'number'.
检查 tsconfig.json 配置。strict
属性值是否为 false。strict 相关的有多个配置。
关于 let num: number = undefined; let unusable: void = null; 会报错的。 应该是作者有添加了tsconfig.json配置文件; 并且其中tsconfig.json的 strict 改成了false;(默认是true) "strict": true, /* Enable all strict type-checking options. */ 默认是严格校验类型的。 如果改成false,就不会报错。 但是默认strict都是true,还是要按照严格来;
如果是没有tsconfig.json 是会报错;
let num: number = undefined; // 严格模式下,会报错
声明变量的数据类型为 void 时,非严格模式下,变量的值可以为 undefined 或 null。而严格模式下,变量的值只能为 undefined。
let num: number = undefined;
这个确实不会报错啊,可能是因为你们用编译器是有做校验吧,我用cmd写是没报错的
let num: number = undefined;
这个确实不会报错啊,可能是因为你们用编译器是有做校验吧,我用cmd写是没报错的
这个不是编译器有校验,是在 tsconfig.json 配置中。strict 属性值设置为了 true,也就是采用 严格模式,严格模式下,会报错: Type 'undefined' is not assignable to type 'number'。 这其实和你通过cmd 运行还是浏览器查看,没有多大的关系。
Boolean 不是转换函数吗 为什么说是 js 中的构造函数啊
void 不能赋值 为 null 会报错的
@leofx 声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null: //会报错 不能将类型“null”分配给类型“void” let unusable: void = null; //不会报错 let unusable: void = undefined;
确实这样 作者 那里 为什么说是可以 不知道是什么意思
@york17 关于 let num: number = undefined; let unusable: void = null; 会报错的。 应该是作者有添加了tsconfig.json配置文件; 并且其中tsconfig.json的 strict 改成了false;(默认是true) "strict": true, /* Enable all strict type-checking options. */ 默认是严格校验类型的。 如果改成false,就不会报错。 但是默认strict都是true,还是要按照严格来;
如果是没有tsconfig.json 是会报错;
确实是如此 这里没有说明配置文件中的作用
2023年了为啥还没有订正呢?