TypeScript从0基础到项目实战:2.Ts的声明与数据类型

127 阅读4分钟

Ts的基本数据类型

js差不多,都是string,number,boolean,symbol,null,undefined这些

但是写法却大有不同

export {}; // 第一行增加这个是为了使文件里的变量不污染全局
let num: number = 1; // number
let str: string = "2"; // string
let bool: boolean = true; // boolean
let sy: symbol = Symbol(); // symbol
let undef: undefined = undefined; // undefined
let nul:null = null; // null
let vd: void = undefined; // 可以把undefined类型赋值给void类型,但是反过来不行
// 函数没有返回值,那么函数的返回值类型就是void
function fn(): void {
  return undefined;
}

对于上面的代码,我们看到与js的不同有

  1. 我们在写这种小案例时的每个ts文件最好都加上 export {}; 因为ts会默认暴露我们的变量,你另外一个ts文件就不能写之前的变量名了
  2. 我们在每个类型的变量名后面都声明了number或string等这种它的类型,因为Typescript对于类型(type)有一个严格的把控,number类型的变量就不能是string,不像之前的js那样随便改
  3. 甚至于ts的函数,对象,数组都说有类型的,例如函数的返回值是空,他就是void类型,是数字,那就是number类型
  4. undefined和null最大的价值主要体现在接口类型上,表示可缺省、未定义的属性;null表示对象或者属性是空值。 这个可以先有个印象,后面说到接口会讲

关于声明的详细说明

1.如果不写类型,typescript是可以推断类型的,但注意let、const的区别

// #region 声明

let str='1'; //通过值推导,它会根据你第一次后面的值类型,对这个变量进行类型的判断

const num=999; //常量,它的类型可以说就是它的值,
//在ts检验中,声明它的值是什么它就是什么,这也代表了常量的不可更改性

let str1:string;//如果不想给初始值,就可以这样子声明好一个专门给字符串用的。

// #endregion

注意

当你给某个没有声明类型的变量第一次赋值为str或num时,这个变量以后就都是这个类型了(其他类型变量同理),例如上面的str变量,我给的是string类型,后面如果我在给它数字,那么会报错

let str='1';
str=1;//报错,不能把数字1赋值给这个string类型变量str

图片.png

2.我们还可以声明字面量

  • 字面量不仅可以表示值,还可以表示类型
let x3: 1 | 3 = 1;
x3 = 2; // 报错
x3 = 3;

let x4:'hello' = 'hello';
x4 = 'hi'; // 报错

注意:

  1. TypeScript 支持 3 种字面量类型:string字面量类型、number字面量类型、boolean字面量类型

Ts的非原始数据类型

1. 小object, 大Object, {}

小object: 代表的是非原始类型的类型,也就是不能是string,number,boolean,symbol,严格模式:多包括null,undefined

 let obj1: object = 3; // 报错
 let obj2: object = "3"; // 报错
 let obj3: object = true; // 报错
 let obj4: object = null; // 报错
 let obj5: object = undefined; // 报错
 let obj6: object = Symbol(); // 报错
 let obj7:object = {a: 1, b: '2'};
 let obj8:object = [1, 2, 3];

大Object : 代表所有拥有 toString、hasOwnProperty 方法的类型,所以所有原始类型、非原始类型都可以赋给 Object,严格模式下不包括null,undefined。{}空对象类型和大 Object 一样。

 let obj1: Object = 3; 
 let obj2: Object = "3"; 
 let obj6: Object = Symbol(); 
 let obj3: Object = true; 
 let obj4: Object = null; // 报错
 let obj5: Object = undefined; // 报错
 let obj7: Object = { a: 1, b: "2" };
 let obj8: Object = [1, 2, 3];

**注意:

  1. 官方文档说可以使用小 object 代替大 Object,但是我们仍要明白大 Object 并不完全等价于小 object。例如大的可以直接放基本数据类型的值,而小的不行

  2. 上面的例子看起来,大Object是小object的父类型,但并不是!!!真实的情况是大Object才是小object的子类型

2. 数组类型

数组类型的定义:

 let arr1: Array<number> = [1, 2, 3];
 arr1.push('3'); // 报错
 arr1.push(5);
 let arr2: string[] = ['4', '5', 'a'];
 arr2[3] = '6';

这里我们定义的arr1是number类型的数组,所以我们push字符串3的时候,会报错

end

学了第二篇文章,我们已经明白了ts与js最大的不同之一了,如果你想接着学习后面的内容可以给这个专栏点个关注,TypeScript从0基础到项目实战我的每一篇文章都会发在这个专栏里,如果觉得对你帮助可以点赞收藏,关注作者