Typescript 基础

Typescript

=js+A type system(what we are learning)

  • catch error
  • “type annotations”=>analyze our code
  • only active during development
  • doesnot provide any performance optimization

npm install -g typescript ts-node
npm init -y创建新项目,建立ts文件写代码
ts-node index.ts=tsc index.ts(编译ts为nodejs格式)+node index.js

Interfaces + Classes = how we get really strong code reuse in TS

view=>extention=>prettier
perfermence=>setting=>format on save/sigle quotes( tick )

import  axios  from  'axios';

const  url  =  'http://jsonplaceholder.typicode.com/todos/1';

// 限制变量类型

interface  Todo {

id:  number;

title:  string;

completed:  boolean;

}

axios.get(url).then((res) => {

const  todo  =  res.data  as  Todo;

const  ID  =  todo.id;

const  title  =  todo.title;

const  finished  =  todo.completed;

logTodo(ID, title, finished);

});

//限制变量和标题一一对应

const  logTodo  = (id:  number, title:  string, completed:  boolean) => {

console.log(`

ID:${id}

Title:${title}

finished:${completed}

`);

};

What is typescript

Syntax + Features VS Design Patterns with TS

1.png

Types

interface=>type
type ===== value


2.png

Annotation

Developers tell Typescript the type

let  apples  :  number  =  5

let  speed:  string  =  'fast'

let  hasName:  boolean  =  true

let  nothingMuch:  null  =  null

let  nothing:  undefined  =  undefined

//built in objects

let  now:Date  =  new  Date()

//Array

let  colors:  string[] = ['red','green','blue'];

let  myNumbers:number[] = [1,2,3]

let  truths:boolean[] = [true,true,false]

//classes

class  Car {

}

let  car:  Car  =  new  Car()

//Object literal

let  point:{x:number;y:number} = {

  x:10,

  y:20

}

//Fuction

const  logNumber: (i:  number) =>  void  = (i:number)=>{

  console.log(i)
  
}

Type Inference

Typescript gueses the type
JSON.parse() we may get different type
‘false’=>(boolean)JSON.parse()=>any
‘4’=>(number)JSON.parse()=>any
‘{“value”:5}’=>({value:number})JSON.parse()=>any
‘{“name”:“alex”}=>({name:string})JSON.parse()=>any

//When to use annotations

// 1)Function that returns the 'any' type

const  json  ='{"x":10,"y":20}'

const  coordinates:{x:number;y:number} =  JSON.parse(json)

//JSON function returns the 'any' type

console.log(coordinates)

// 2)When we declare a variable on one line

// and initalizate it late

let  words  = ['red','green','blue']

let  foundWord:  boolean;

for (let  i  =  0; i  <  words.length; i++) {

  if(words[i] ===  'green'){

    foundWord  =  true

  }

}

// 3) Variable whose type cannot be inferred correctly

let  numbers  = [-10, -1, 12]

let  numberAboveZero  :boolean|number  =  false;

for (let  i=  0;i  <  numbers.length; i++){

  if(numbers[i] >  0){

    numberAboveZero  =  numbers[i]//type inference

  }

}

Annotations with function and objects

(destructuring)

  • functions
    never 类型是 TypeScript 中的底层类型。它自然被分配的一些例子:

(A) 一个从来不会有返回值的函数(如:如果函数内含有 while(true) {});
(B)一个总是会抛出错误的函数(如:function foo() { throw new Error('Not Implemented') }foo 的返回类型是 never);

const  add  = (a:  number, b:  number) => {

return  a  +  b

}

const  substract  = (a:  number, b:  number) =>{

return  a  -  b;

}

function  dicide(a:number , b:number):number{

return  a  /  b

}

const  multiply  =  function (a:number,b:number):number{

return  a  *  b

}

const  logger  = (message :  string):void  =>{

console.log(message)

}

const  throwError  = (message :  string):void=>{

if(!message){

throw  new  Error(message)

}

}
const  forecast  = {

date :new  Date(),

weather:'sunny'

}

// const logWeather = (forecast: {date: Date, weather: string})=>{

// console.log(forecast.date)

// console.log(forecast.weather)

// }

//destructuring

const  logWeather  = ({date,weather}: {date:  Date, weather:  string})=>{

console.log(date)

console.log(weather)

}
  • objects
const  profile  = {

  name:'alex',

  age:20,

  coords:{

    lat:0,

    lng:15

  },

setAge(age:  number):void{

  this.age  =  age

}

}

const {coords:{lat,lng}} :{coords:{lat:number;lng:number}}=  profile

Matsering Typed Arrays

  • TS can do type inference when extracting values from an array
  • TS can prevent us from adding incompatible values to the array
  • We can get help with ’map’, ‘forEach’, ‘reduce’ function
  • Flexiable- arrays can still contain multiple different types
const  carMakers:  string[] = ['ford','toyota','chevy']

const  dates  = [new  Date(),new  Date()];

const  carsByMake:string[][] = [

['f150'],

['corolla'],

['camaro']

]

//Multiple Types in Arrays

//Help with inference when extracting values

const  car_  =  carMakers[0]

const  myCar  =  carMakers.pop();

//prevent incimpatible values

carMakers.push(100)

//Help with 'map'

carMakers.map((car:string):string  =>{

return  car.toUpperCase()

})

//Flexiable types

const  importantDates:(Date|string)[] = [new  Date(),'2030-10-10']

importantDates.push(new  Date())

importantDates.push('2030-10-10')

Tuples in typescript

  • tuple=>array-like structure where each element represents some property of a record
  • Why tuples?
    =>不建议,比如一个object有几个相同类型就无法判定
    除了这种情况可以用
const  drink  = {

color:'brown',

carbonated:true,

sugar:40

}

//Type alias

type  Drink  = [string, boolean, number];

const  pepsi:  Drink  = ['brown', true, 40]

const  sprite:  Drink  = ['clear',false,0]

const  tea:  Drink  = ['brown',false,0]

const  carSpecs:[number, number] = [400,3354];

const  carSptats  = {

horsepower: 400,

weight:3354,

}

The All-Important Interface

Interfaces + Classes = How we get really strong code reuse in TS
Interfaces->Create a new type, describing the property names and value types of an object

interface  Reportable {

  summary():  string;

}

const  oldCivic  = {

  name: 'civic',

  year: new  Date(),

  broken: true,

  summary():  string {

    return  `Name: ${this.name}`;

  },

};

const  drink_  = {

  color: 'brown',

  carbonated: true,

  sugar: 40,
  
  summary():  string {

    return  `My drink has ${this.sugar} grams of sugar`;

  },

};

const  printSummary  = (item:  Reportable):  void  => {

  console.log(item.summary());

};

printSummary(oldCivic);

printSummary(drink_);

Building Functionality with Classes

  • Classes => Blueprint to create an object with some fields(values) and methods(functions) to represent a thing
  • Instance Methods Modifiers
    Public=>This method can be called any where, any time
    Private=>This method can only be called by other methods in this class
    Protected=>This method canbe called by other methods in this class, or by other methods in child classes
class  Vehicle {

  color:  string  =  'red';

  constructor(color:  string) {

  this.color  =  color;

}

public  drive():  void {

  console.log('chugga chugga');

}

public  honk():  void {

  console.log('beep');

}

}

const  vehicle  =  new  Vehicle('orange');

//如果honk是protected这里就不可以被调用

vehicle.honk();

console.log(vehicle.color);

class  Car_  extends  Vehicle {

  constructor(public wheels:number,color:string){

  super(color)

}

//复写方法不能改变类型(public/private/protected)

drive():  void {

  console.log('vroom');

}

startDrivingProcess():  void {

  this.drive();

  //如果honk是private这里就不能用

  //因为private只有同class内部的function可以调用

  //protected可以

  //因为protected除了同class内部的function以外

  //还有可以被其子class的function调用

  this.honk();

}

}

const  car__  =  new  Car_(4,'red');

car__.drive();

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