TypeScript 是什么,以及它的一些基础语法

目录

 一. TypeScript 是什么?

二. 为什么要使用TS(即,为什么要给JS代码加类型):

三. JS与TS的关系:

 四. 基础语法

1. TS 的基本类型:

2. 原语:

3. 数组:

4. 对象:

5. 函数:

6.空值void

7.联合类型: 

8. 类型断言:

9. 元组 Tuple:

10. 枚举 enum:

11.any:

12.字面量类型+联合类型


 一. TypeScript 是什么?

TypeScript 是 JavaScript 的运行时,带有编译时类型检查器。

 注: 1)TypeScript 代码会被编译成JavaScript代码,JS代码才是实际被执行的代码。

          2)JS是弱类型的,而TS提供了强类型以及更多的面向对象的内容。

二. 为什么要使用TS(即,为什么要给JS代码加类型):

最重要的一点是,利于代码的重构,利于编译器在编译时捕获异常,而非在运行时才捕获。

三. JS与TS的关系:

TS只是带有文档的JS,提供一种新的语法,减少bug产生。

 四. 基础语法

1. TS 的基本类型:

字符串(string)、数字(number)、布尔值(boolean)、空(null)、未定义(undefined)、数组(array)、对象(object)、元组(tuple)、枚举(enum)、any、void、never等12种。

2. 原语:

string   字符串值,也可模板字符串

let name: string = "Tom";           let hello = `hello my name is ${name}`;

number  没有int、float, 一切都是number ,包括 XX进制    

let age: number = 6;                   let price: number = 0xf00d;

boolean  true和flase 

let gender: boolean = false;

3. 数组:

[1,2,3 ] => number [ ] ; 也可 Array< number > (泛型)

[ 'li','2','3' ] => string [ ]  Array <string>

export  interface  valueGroup {
    name:string;
    age:number,
    sex:boolean
}


export const  fun1 =(value: valueGroup[])=>{
    // value:valueGroup[] 意思是说,value是个数组,他的每一项都是下面这种对象,即[{},{},{}]
     .........
}
4. 对象:

属性:

let person3: {

        name: string;

        sayHello: Function;   // 或者 sayHello(): void

} = {

        name: '王五',

        sayHello() {},

};

类型别名:

type Point = {
    x: number;
    y: number;
};


function printCoord ( pt: Point ) {
}

接口声明:

interface Point {
   x: number;
   y: number;
}

function printCoord ( pt: Point ) {

}

注:类型别名与接口之间的差异

类型别名和接口非常相似,在很多情况下你可以自由选择它们。几乎所有的功能都在interface中可用type,关键区别在于 类型创建后不可更改,接口创建后可以添减新字段

5. 函数:

// 单独指定参数,返回值类型

function  greet (name: string):string     

        return name;

}

可选属性: 检查这个属性是否存在,当为undefined时不给此值赋值,用?

function printName(obj: { first: string; last?: string}) {

}

// 同时指定参数,返回值类型
type addFunc = (num1: number, num2: number) => number; 

const adds: addFunc = (num1, num2) => {
  return num1 + num2;
};

 js写法 : 

fun foo(){
    //if ......
    retrun { a:1, b:2 };
    //else.........
    return { a:1, b:undefined }
}

ts写法 : 

fun foo() : {a:number, b?:number} {
    //if ......
    retrun { a:1, b:2 };
    //else.........
    return { a:1 }
}
6.空值void

某种程度上, void类型像是与any类型相反,它表示没有任何类型. 当一个函数没有返回值时,你通常见到的就是void;

function add1(): void {
 //等同下面2种写法
}

const add2 = () => {};
// 如果什么都不写 表示add2函数的类型为void
 
const add3 = (): void => {};
// 这种写法明确指定返回值为void与上方的类型相同
 


//void和undefine的不一样
const add4 = (): undefined => {
  return undefined;
};
// 如果指定返回值为undefined  return undefined

声明一个void类型的变量没什么大用,因为你只能给它赋值undefined和null 

let unsable: void = undefined

一个例子:

7.联合类型: 

表示可能是这些类类型中的任何一种值

function printId ( id: number | string ){

}

function welcomePeople(x: string[] | string) {

}

8. 类型断言:

若很清楚 一个变量 比 它现有类型更确切的类型,那么就可以使用类型断言。

 类型断言两种形式:

     1) 尖括号写法:

          let someValue : any = " a string";

          let strLength : number = ( <string> someValue ).length;

      2) As写法:

          let someValue : any = " a string";

          let strLength : number = ( someValue as string ).length;

      注:当在TypeScript里使用JSX时,只能使用as语法断言。

9. 元组 Tuple:

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同.比如:你可以定义一对值为string和number类型的元组

let arr: [string, number] = ['li', 5];

10. 枚举 enum:
enum Week{Mon,Tue,Wed}
let day:Week = Week.Tue
console.log(day) // 1
console.log(Week[0]) // Mon
console.log(Week["Mon"]) // 0
//数字枚举

// Down -> 11、Left -> 12、Right -> 13
enum Direction {
  Up = 10,
  Down,
  Left,
  Right,
} 

enum Direction {
  Up = 2,
  Down = 4,
  Left = 8,
  Right = 16,
}
//字符串枚举
enum Direction {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Right = 'RIGHT',
}
11.any:

当不希望某个特定值导致类型检查错误时使用, 可以访问他的任何值

let anyValue:any = 4;

anyValue = 'hello';

12.字面量类型+联合类型
// 字面量类型
 
let str1 = '张三';
const str2 = '张三';
type Direction = 'left' | 'right' | 'up' | 'down';

// 使用自定义类型:
 
function changeDirection(direction: Direction) {
//参数 direction 的值只能是 up/down/left/right 中的任意一个
 
  console.log(direction);
}
 
// 调用函数时,会有类型提示:
changeDirection('up');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值