基础类型

布尔类型

let isDone: boolean = false;

数字类型

数字类型包括:十进制,十六进制,二进制,八进制

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;

字符串类型

字符串:使用单引号或者双引号表示
表达方式:可以使用模版字符串,可以定义多行文本和内嵌表达式

let userName: string = "bob";
userName = 'jjzhang';
let message: string = "Gene";
let age: number = 20;
let sentence: string = `Hello, my name is ${message}. I will be ${age + 1} years old next month`;

数组

有两种定义方式:

  • 可以再元素类型后面加上[],表示由此类型元素组成的一个数组
  • 使用数组泛型,Array<number>
let list: number[] = [1,2,3];
let array: Array<number> = [1,2,3];

元组Tuple

允许表示一个已知数量和类型的数组,各元素类型不必相同

let tupl: [string, number];
tupl = ['hello', 10];

枚举

使用枚举类型可以为一组数值赋予友好的名字
优点:枚举提供的一个便利是可以由枚举值得到他的名字
定义:

  • 默认情况下从0开始为元素编号
  • 也可以手动指定成员的数值
  • 也可以全部采用手动赋值
enum Color { Red, Green, Blue };
let color: Color = Color.Red; // 0
let colorName: string = Color[1]; // Green

enum Balls { FootBall = 1, BasketBall, ValliBall };
let ball = Balls.BasketBall; // 2
let ballName: string = Balls[2]; // BasketBall

enum Mobiles { Xiaomi = 1, Huawei = 3, Apple = 5 };
let mobile = Mobiles.Huawei; // 3
let mibileName: string = Mobiles[3]; // Huawei

Any类型

使用场景:在编程阶段还不清楚类型的变量指定一个类型
目的:不希望在编译阶段对这些值进行类型检查
注:当只知道一部分数据类型时,可以在any后面加已知类型

let notSure: any = 4;
notSure = 'I am a string';
notSure = false;
// 必须是数组
let anyList: any[] = [1, 'free', true];
anyList[1] = 100;

Void类型

定义:某种程度上与any类型相反,表示没有任何类型,通常表示函数没有返回值
注:当用void声明一个变量时,其实意义不大,因为只能赋值:undefined跟null

function warnUser(): void {
  console.log('This is a wran message');
}
let unusable: void = undefined;

Null 和 Undefined类型

定义:undefined跟null两者各自有自己的类型分别叫做undefined跟null
注:跟void相似,他们本身的类型用处不大
场景:

  • 默认情况下null和undefined是所有类型的子类型,就是说可以把null和undefined赋值给number等所有类型
  • 当在tsconfig.json中开启 "strictNullChecks": true 时 null跟undefined只能赋值给void和他们各自
  • 官方推荐使用 "strictNullChecks": true
let undefd: undefined = undefined;
let nul: null = null;
let numb: number = undefined;
// 开启strictNullChecks时,下面方式报错
let num1: number;
num1 = undefined; // 报错

Never类型

定义:表示那些永不存在的值的类型

注意:

  • never类型是任何类型的子类型,也可以赋值给任何类型
  • 没有类型是never的子类型,所以也不能赋值给never类型,即使any也不可以赋值
 // 返回never的函数必须存在无法达到的终点
 function error(message: string): never {
   throw new Error(message);
 }
 // 推断的返回值类型为never
 function fail() {
   return error('Something failed');
 }
 // 返回never的函数必须存在无法达到的终点
 function infiniteLoop(): never {
   while(true) {}
 }

原始类型

即基本类型:number,string,boolean,symbol,null,undefined
Object类型:表示原始类型之外的类型

declare function create(o: object | null): void;
create({prop: 0}); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

类型断言

前提:由于TS在编译是做静态推断的,所以编译阶段已经确定了每个字段的类型
目的:用来告诉编译器你比他更了解这个类型,并且可以修改这个类型
跟类型转换的区别:

  • 类型转换:转换通常意味着某种运行时的支持
  • 断言:断言纯粹是一个编译时语法,也是一种为编译器提供关于如何分析代码的方法
// 下面代码报错,是因为foo的类型被编译器推断为{},即具有零属性的对象,所以不能在他的属性上添加bar跟bas
const foo = {};
foo.bar = 123; // Error: 'bar' 属性不存在于 ‘{}’
foo.bas = 'hello'; // Error: 'bas' 属性不存在于 ‘{}’
// 可以通过断言来避免此问题
interface Foo {
  bar: number,
  bas: string
}
const foo = {} as Foo;
foo.bar = 123; // OK
foo.bas = 'hello'; // OK

断言类型的两种方式:

  • 尖括号语法
  • as 语法
// 尖括号 语法
let someValue: any = 'this is a string';
let strLength: number = (<string>someValue).length;
// as 语法
let anyValue: any = 'this is a string';
let strLen: number = (anyValue as string).length;
// 用处
function handler(event: Event) {
  const mouseEvent = event as MouseEvent;
}
// 如果上面方式还不是报错的话,可以使用双重断言
function handle(event: Event) {
  const mouseEvt = (event as any) as MouseEvent;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 转载地址 TypeScript基础入门 - 基础类型 项目实践仓库 为了保证后面的学习演示需要安装下ts-node...
    鹏鲲云之上阅读 535评论 0 1
  • 布尔值 最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boo...
    oWSQo阅读 375评论 0 0
  • 介绍 为了让程序有价值,我们需要能够处理最简单的数据单元:数字,字符串,结构体,布尔值等。 TypeScript支...
    凌统丶阅读 318评论 0 0
  • typyscript 学习笔记---基础数据类型 1. boolean 声明方式: let b : boolean...
    2分_08b6阅读 240评论 0 0
  • 我以前跟他提过说有别的男生人肉搜索到我的微博 后来他果然也来找我的微博了 只可惜他还是比较笨吧 只找到这个我...
    我是duyang阅读 416评论 0 1