本文主要是介绍值类型之Hello翻身当类型了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
值类型
TypeScript 规定,单个值也是一种类型,称为“值类型”。
let Zakun: "hello";Zakun = "hello"; // 正确
// Zakun = "world"; // 报错
上面示例中,变量Zakun的类型是字符串hello,导致它只能赋值为这个字符串,赋值为其他字符串就会报错
TypeScript 推断类型时,遇到const命令声明的变量,如果代码里面没有注明类型,就会推断该变量是值类型。
// x 的类型是 "https"
const x = 'https';// y 的类型是 string
const y:string = 'https';
上面示例中,变量x
是const
命令声明的,TypeScript 就会推断它的类型是值https
,而不是string
类型。
这样推断是合理的,因为const
命令声明的变量,一旦声明就不能改变,相当于常量。值类型就意味着不能赋为其他值。
注意,const
命令声明的变量,如果赋值为对象,并不会推断为值类型。
// x 的类型是 { foo: number }
const x = { foo: 1 };
上面示例中,变量x
没有被推断为值类型,而是推断属性foo
的类型是number
。这是因为 JavaScript 里面,const
变量赋值为对象时,属性值是可以改变的。
值类型可能会出现一些很奇怪的报错。
const x:5 = 4 + 1; // 报错
上面示例中,等号左侧的类型是数值5
,等号右侧4 + 1
的类型,TypeScript 推测为number
。由于5
是number
的子类型,number
是5
的父类型,父类型不能赋值给子类型,所以报错了
但是,反过来是可以的,子类型可以赋值给父类型。
let x:5 = 5;
let y:number = 4 + 1;x = y; // 报错
y = x; // 正确
上面示例中,变量x属于子类型,变量y属于父类型。子类型x不能赋值为父类型y,但是反过来是可以的。
如果一定要让子类型可以赋值为父类型的值,就要用到类型断言
const x:5 = (4 + 1) as 5; // 正确
上面示例中,在4 + 1
后面加上as 5
,就是告诉编译器,可以把4 + 1
的类型视为值类型5
,这样就不会报错了。
只包含单个值的值类型,用处不大。实际开发中,往往将多个值结合,作为联合类型使用。
这篇关于值类型之Hello翻身当类型了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!