新手入门type-script 第一节

364 阅读4分钟

什么时间开始学习TypeScript?

永远是当下最合适。

什么是TypeScript?

官方是这么说的:“TypeScript是JavaScript类型的超集”。

用通俗易懂的话(人话)来说呢,就是:TypeScript是JavaScript的升级版,更重视类型。

开始搭环境

TypeScript需要的环境很简单:

  • 一个文件目录 /ts-demo
  • node node环境大家都会装,不做解释,问就你是个好人。
  • typescript 全局安装typescript

npm install typescript -g

  • ts-node 全局安装ts-node:可以通过命令行直接得到ts文件执行结果的插件

npm install ts-node -g

开始撸代码

让我们一起开开心心地搭建一个追妹平台,不一定能帮大家找到对象,但学习到技术可能比追到妹子1还要开心吧(反正我选择妹子)。

1. 创建第一个ts文件

我们创建一个Demo1.ts文件,在里面输出一句问候语:

/ts-demo/Demo1.ts

function sayHello() {
    let message: string = "你好,下雨了我能送你回家吗?";
    console.log(message);
}

sayHello();

在命令行中执行

ts-node Demo1.ts

控制台输出:你好,下雨了我能送你回家吗?,得到我们预期结果。

2. 我们试着改写一下上面的ts文件,给它增加一个参数:name

function sayHello(name: string) {
    let message: string = `你好,我叫${name},下雨了我能送你回家吗?`;
    console.log(message);
}

sayHello("张楚岚");

大家可能会好奇:name: stringmeessage: string这两个是什么鬼?

这里其实是定义了变量的静态类型,也就是说:定义的name和message这两个变量,只能是我们定义的string类型,给它赋其它类型的值就会报错。

除了string类型,还有其它几种基础类型可以被定义:boolean、number、数组、元组、枚举、any、void、null || undefined、never、object。大家可能会对这几种类型存有疑惑,尤其是元组、枚举、never这几种在js中不太会用到的类型。稍安勿躁,我们继续完善上面的追妹系统,这些类型都会被一一讲到。

3. 让我们给这个追妹系统添加一些别的属性,让人物更饱满

首先,让我们把参数抽取出来,放到一个对象Person中,这里我们用type关键字定义一个类型别名,类型别名用来让我们更容易复用。

type Person = {
    name: string
}

function sayHello(person: Person) {
    let message: string = `你好,我叫${person.name},下雨了我能送你回家吗?`;
    console.log(message);
}

sayHello({name: "张楚岚"});

然后,让我们给人物加上年龄age,再把上面的sayHello方法改一改,毕竟剧情总是要发展的,也不能老是在下雨。

type Person = {
   name: string,
   age: number
}
function makeFriend(person: Person) {
   let message: string = `你好,我叫${person.name},今年${person.age}岁,我很喜欢你,可以交个朋友吗?`;
   console.log(message);
}
makeFriend({name: "张楚岚", age: 20})

现在我们完成了自我介绍,而且还加了一个number类型的age属性。我们先不管后续,先把人物变得更丰富。

enum Sex {male, female}

type Person = {
    name: string,
    age: number,
    job: [string, number],
    sex: Sex,
    isSingle: boolean
}

我们在上面的代码中使用了enum类型,也就是枚举类型,它列出了性别的选项,必须是男或是女。我们还给人物增加是否单身isSingle,它是boolean类型,表示是否是单身。还有job选项,它是一个元组,[string, number]表示job必须有两个值,一个是string工作名称,一个是number收入。元组和数组相似,但是元组规定了每一项的类型。

4. 让我们来创建一个人物吧

const ZhangChulan:Perosn = {
    name: "张楚岚",
    age: 20,
    job: ["快递员", 15000],
    sex: Sex.male,
    isSingle: true
}

我们创建了张楚岚这个人物,我们知道他有一个绰号,我们想把这个绰号也加进去,但不是每个人都有绰号,这个时候我们可以在:前面加一个?,表示可选项,让我们来试试:

type Person = {
    name: string,
    age: number,
    job: [string, number],
    sex: Sex,
    isSingle: boolean,
    nickName?: string
}

const ZhangChulan:Person = {
    name: "张楚岚",
    age: 20,
    job: ["快递员", 15000],
    sex: Sex.male,
    isSingle: true,
    nickName: '不摇碧莲'
}

5. 楚岚小哥哥,20岁正青春,荷尔蒙散发,让我们给他来找对象吧!

广发佳人贴,报名何其多,这个时候,让我们来看看吧:

const persons: Person[] = [
    {
    	name: "冯宝宝",
        age: 22,
        job: ["快递员", 30000],
        sex: Sex.female,
        isSingle: true,
        nickName: '宝儿姐'
    },
    {
    	name: "柳妍妍",
        age: 18,
        job: ["湘西赶尸", 30000],
        sex: Sex.female,
        isSingle: true,
    },
    {
    	name: "夏禾",
        age: 22,
        job: ["全性", 300000],
        sex: Sex.female,
        isSingle: false,
        nickName: '刮骨刀'
    },
    {
    	name: "陆玲珑",
        age: 20,
        job: ["大小姐", 800000],
        sex: Sex.female,
        isSingle: true,
    },
    {
    	name: "王也",
        age: 22,
        job: ["道长", 8000],
        sex: Sex.male,
        isSingle: true,
    },
    {
    	name: "风莎燕",
        age: 26,
        job: ["大小姐", 800000],
        sex: Sex.female,
        isSingle: false,
    },
];

这里我们使用了数组类型,定义了一个Person[],表示一个Person类型的数组,数组的每一项都必须符合Person类型。列出了报名的人员,让我们来筛选一下,过滤到其中的男性和已婚角色。

function getGirls(persons: Person[]) {
	let girls:Person[] = [];
	persons.map((person) => {
    	if(person.sex === Sex.famale && person.isSingle) {
            girls.push(person);
        }
    });
    return girls;
}

getGirls(persons);

本节最终代码如下,大家可以通过命令行执行ts-node Demo1.ts,在控制台看到符合要求的小姐姐的信息啦:

/ts-demo/Demo1.ts

enum Sex {
  male,
  female,
}

type Person = {
  name: string;
  age: number;
  job: [string, number];
  sex: Sex;
  isSingle: boolean;
  nickName?: string;
};

const ZhangChulan: Person = {
  name: "张楚岚",
  age: 20,
  job: ["快递员", 15000],
  sex: Sex.male,
  isSingle: true,
  nickName: "不摇碧莲",
};

const persons: Person[] = [
  {
    name: "冯宝宝",
    age: 22,
    job: ["快递员", 30000],
    sex: Sex.female,
    isSingle: true,
    nickName: "宝儿姐",
  },
  {
    name: "柳妍妍",
    age: 18,
    job: ["湘西赶尸", 30000],
    sex: Sex.female,
    isSingle: true,
  },
  {
    name: "夏禾",
    age: 22,
    job: ["全性", 300000],
    sex: Sex.female,
    isSingle: false,
    nickName: "刮骨刀",
  },
  {
    name: "陆玲珑",
    age: 20,
    job: ["大小姐", 800000],
    sex: Sex.female,
    isSingle: true,
  },
  {
    name: "王也",
    age: 22,
    job: ["道长", 8000],
    sex: Sex.male,
    isSingle: true,
  },
  {
    name: "风莎燕",
    age: 26,
    job: ["大小姐", 800000],
    sex: Sex.female,
    isSingle: false,
  },
];

function getGirls(persons: Person[]) {
  let girls: Person[] = [];
  persons.map((person) => {
    if (person.sex === Sex.female && person.isSingle) {
      girls.push(person);
    }
  });
  return girls;
}

console.log(getGirls(persons));

截止到现在,大家应该对ts有了一定的了解,我们楚岚小哥哥也成功筛选到了符合他要求的单身女性,我们下节继续,为追妹平台增砖添瓦。