写篇好的文章并不是一件简单的事情 (附上一天一篇)<TS:原始数据类型、联合类型、类型推断>

351 阅读2分钟

写一篇好的文章真的非常不简单,我现在回去看我曾经写过的文章,真的很多地方都是狗屁不通,也完全没有按照“循序渐进,一层一层”这个思想去写。很大的程度时因为本身水平不高导致,最主要的问题还是过于浮躁(要秋招了),写的很急,很多地方只有自己看得懂,新入门的小伙伴看着想骂人(这是什么,那是什么,根本无法入门,what the fuck!)。

等我正式入职后会提升文章的质量的……或者拿了心仪的offer后,也会对之前的文章做可读性的修改与备注(至于现在还是会写的比较适合有经验的同学复习)。

  • 原始数据类型

    • 布尔值
    • 数值
    • 字符串
    • null
    • undefined
    • ES6 中的新类型 Symbol
//布尔值
let isDone: boolean = false;
let createdByNewBoolean: boolean = new Boolean(1);
//   'boolean'是一个原始数据类型, but 'Boolean'是一个对象.

//数值
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;

//字符串
let myName: string = 'Tom';
let myAge: number = 25;

// 模板字符串
let sentence: string = `Hello, my name is ${myName}.I will be ${myAge + 1} years old next month.`;

// 函数return 为空的时候,使用viod代表 ‘空’
function alertName(): void {
    alert('My name is Tom');
}

// null 和 undefined
let u: undefined = undefined;
let n: null = null;
// 与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:

let num: number = undefined;// 可

let u: void;
let num: number = u;// 不可
  • 不得不提的 any

使用any很大程度上你可以视为你正在使用js而非ts

如果是一个普通类型,在赋值过程中改变类型是不被允许的:
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
// 报错

如果是any
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;
// 一切ok
  • 联合类型

不扯概念,简单例子:

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// 不报错

let myFavoriteNumber: string | number;
myFavoriteNumber = true;
// 报错

访问不共有的属性的时候,会报错,如下所示,number并不拥有length属性,所以会报错。

function getLength(something: string | number): number {
    return something.length;
}

toString()是大家都有的方法,所以不报错

function getString(something: string | number): string {
    return something.toString();
}
  • 类型推论

这个……也没啥好说的。

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// 实际上等于
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
// 所以会报错