typescript-tutorial icon indicating copy to clipboard operation
typescript-tutorial copied to clipboard

原始数据类型

Open xcatliu opened this issue 4 years ago • 16 comments

https://ts.xcatliu.com/basics/primitive-data-types.html

xcatliu avatar Jun 08 '20 12:06 xcatliu

当定义个方法为空值Void时,该方法内写return时编译会报错"Type '"void"' is not assignable to type 'void'",但依然会编译成功

xuejiancnode avatar Jul 01 '20 08:07 xuejiancnode

javascript 中 null 不是表示空值吗?ts 中 viod 表示不是任何类型,而 undefined 或者 null 是所有类型的子类型,所以 viod 类型的变量只能赋值为 undefined 或者 null。在 ts 中 viod 主要用法是定义一个没有返回值的函数吧

qlHuo avatar Aug 13 '20 10:08 qlHuo

// 这样不会报错
let num: number = undefined;

实际上测试会报错 error TS2322: Type 'undefined' is not assignable to type 'number'.

JnathanCoder avatar Sep 09 '20 09:09 JnathanCoder

声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null: //会报错 不能将类型“null”分配给类型“void” let unusable: void = null; //不会报错 let unusable: void = undefined;

leofx avatar Sep 30 '20 01:09 leofx

文档描述与实际使用确实有出入,正如其他评论提到的;也没看到作者回应或者勘误,到这里就不敢继续往下看了....

Hishengs avatar Oct 21 '20 07:10 Hishengs

@Hishengs 不同的 tsconfig.json 配置会产生不同的报错等级。这里的代码是基于 tsconfig.json 中配置 strict: false 的(写此书的时候 false 是其默认值),所以可能与你测试的结果不一致。

今在评论区做出说明,后面会全书订正为使用 script: true 并做出解释。

xcatliu avatar Oct 21 '20 09:10 xcatliu

@JnathanCoder

// 这样不会报错
let num: number = undefined;

实际上测试会报错 error TS2322: Type 'undefined' is not assignable to type 'number'.

检查 tsconfig.json 配置。strict 属性值是否为 false。strict 相关的有多个配置。

magnnus avatar Oct 26 '20 07:10 magnnus

关于 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 是会报错;

york17 avatar Nov 09 '20 06:11 york17

let num: number = undefined; // 严格模式下,会报错

zimeng303 avatar Nov 10 '20 07:11 zimeng303

声明变量的数据类型为 void 时,非严格模式下,变量的值可以为 undefined 或 null。而严格模式下,变量的值只能为 undefined。

zimeng303 avatar Nov 10 '20 07:11 zimeng303

let num: number = undefined; 这个确实不会报错啊,可能是因为你们用编译器是有做校验吧,我用cmd写是没报错的

jiutianliminwang avatar Dec 28 '20 08:12 jiutianliminwang

let num: number = undefined; 这个确实不会报错啊,可能是因为你们用编译器是有做校验吧,我用cmd写是没报错的

这个不是编译器有校验,是在 tsconfig.json 配置中。strict 属性值设置为了 true,也就是采用 严格模式,严格模式下,会报错: Type 'undefined' is not assignable to type 'number'。 这其实和你通过cmd 运行还是浏览器查看,没有多大的关系。

zimeng303 avatar Dec 28 '20 08:12 zimeng303

Boolean 不是转换函数吗 为什么说是 js 中的构造函数啊

ggg1it avatar Jan 29 '21 08:01 ggg1it

void 不能赋值 为 null 会报错的

@leofx 声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null: //会报错 不能将类型“null”分配给类型“void” let unusable: void = null; //不会报错 let unusable: void = undefined;

确实这样 作者 那里 为什么说是可以 不知道是什么意思

ggg1it avatar Jan 29 '21 08:01 ggg1it

@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 是会报错;

确实是如此 这里没有说明配置文件中的作用

ggg1it avatar Jan 29 '21 08:01 ggg1it

2023年了为啥还没有订正呢?

mablevi avatar Mar 08 '23 02:03 mablevi