Typescript 数据类型(一)

396 阅读2分钟

TypeScript是什么?

TypeScript 是一种编译性语言、强类型语言、真正的面向对象,它是 JavaScript 的一个超集。

TypeScript与javaScript的区别

  • TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法;
  • TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译;
  • TypeScript文件的后缀名 xxx.ts (*.ts *.tsx *.dts)JavaScript文件是xxx.js
  • 在编写 TypeScript 的文件的时候就会自动编译成 js文 件

TypeScript 的优缺点

优点:

  • 新增了其他语言的语法(比如 Interface(接口)、Generics(泛型)、Enums(枚举)、断言等;
  • TypeScript 兼容了 ES6 ;
  • 兼容大部分第三方库,即使第三方库不是用 TypeScript 写的,也可以编写单独的类型文件供 TypeScript 读取;
  • 开源社区活跃;

缺点:

  • 需要一些学习成本,需先了解基本 js 内容

编译 TypeScript

经过编译的 TypeScript 文件xxx.ts,会得到一个xxx.js 文件

tsc test.ts

数据类型

Typescript 的数据类型分为两种类型,分别是原始数据类型和非原始类型,本文讲到的是原始数据类型。

原始数据类型 (JavaScript 基本数据类型)

  • boolean 布尔值
let isBoolean: boolean = false;

使用构造函数 Boolean 创造的对象不是布尔值,返回一个Bool对象。

let boolObjcet: any = new Boolean(1);  //返回bool对象
  • number 数值
let pricecount : number = 3.04;
let notANumber : number = NaN //非数值
let hexLiteral: number = 0xf00d; // 十六进制
let binaryLiteral: number = 0b1010; //ES6 二进制
let octalLiteral: number = 0o744; //ES6 八进制
  • string 字符串
//字符串
let personname : string = '小名';
//多行字符串支持 ES6 模板字符串
let moreString : string = `Hello, my name is ${personName} I will be good ${isSuccess}`; 
  • null 和 undefined 这种类型的变量只能被分别赋值为 null 和 undefined,但可以赋值为其他任何类型,它们是所有类型的子类型。
let nullValue : null = null;
let undefineValue : undefined = undefined;
let num : number = undefined;
  • Symbol(ES6 提出的新类型) 直接使用 Symbol() 创建新的symbol类型,并用一个可选的字符串作为其描述。每个从 Symbol() 返回的 symbol 值都是唯一的。
let symbol1 = Symbol();
let symbol2 = Symbol(42);
let symbol3 = Symbol('foo');
let symbol4 = Symbol('foo');

console.log(typeof symbol1); //输出 "symbol"
console.log(symbol2 === 42); //输出 false
console.log(symbol3.toString()); //输出 "Symbol(foo)"
console.log(symbol3 === symbol4); //输出 false,具有唯一性

Symbol 类型的值可以作为对象属性的键,与字符串类似

let sym = Symbol("foo");
let obj = {[sym]: 1};
console.log(obj[sym]); //输出1

Symbols也可以与计算出的属性名声明相结合来声明对象的属性和类成员。

const getClassNameSymbol = Symbol();

class C {
	//用来计算获取属性名的方法
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

注意,以下这种写法是错误

var sym = new Symbol(); // TypeError