typescript基础总结

 介绍

vscode操作:

变量

作用域

声明

数据类型

number

string

数组

元组

运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

三元运算符

类型运算符

字符串连接运算符

结构

条件

循环

跳出循环

函数

定义

调用

参数

可选参数

默认参数

剩余参数

匿名函数

类与对象

模块与命名空间

模块系统

命名空间


若有缺失的只是可以对照一下知识流图来查看(博主没钱,买不起vip)

介绍

typescript是JavaScript的超集

检查ts安装是否成功

用win+r输入cmd后或者SHIFT右键打开Powershell(win11直接右键使用终端打开即可)

npm i -g typescript

然后输入

npm i -g typescript

安裝完ts后输入tsc检测

编译ts文件:

tsc命令编译(翻译)成js文件

node执行js文件

tsc test01.ts
node test01.js

vscode操作:

检测编译

控制台中输入 tsc main.ts -w ,监测main.ts文件的编译,控制台中输入ctrl + c停止

文件夹编译

新建一个tsconfig.json文件,控制台中输入 tsc -w ,监测当前文件夹下所有的ts文件的编译,控制台中

输入ctrl + c停止

变量

作用域

全局作用域 :整个ts文件 整个全局

类的作用域:类的作用域 通过类的对象访问普通类变量,类的静态变量通过类名直接访问

局部作用域:声明在代码块

声明

let :当前块作用域下

var :全局环境

const :声明常量 拥有和let一样的作用域

例子:

console.log("第一个ts文件"); 
let a = 10;
var b = 12; 
let c :string = "jhajkd"; 
const data = "fffff";

注意

typescript 区分大小写

代码分号是可选的

注释写法:

单行//

多行/**/

数据类型

  1. 任意类型 any 变量可以赋予任何类型的值

  2. 数字 number 双精度64位浮点值

  3. 字符串 string

  4. boolean 布尔值类型

  5. 数组类型

  6. 元组 表示已知元素数量和类型的数组

  7. 枚举

  8. void 用来标识方法返回值

  9. null

  10. undefined 未定义

  11. never

number

ts与C++的区别

typescript(double)

c++ (int float double)

取值范围

最大值 1.7976931348623157e+308

最小值 5e-324

可通过以下代码查看

console.log("最大值" ,Number.MAX_VALUE); 
console.log("最小值" ,Number.MIN_VALUE);

获取数值所对应的字符串

let num = 55; 
console.log(typeof(num)); 
let str = num.toString(); 
console.log(typeof(str)); 
console.log(str); 

string

要点:c++ ''代表字符 "" 代表字符串 typescript 没有字符只有字符串,双引号与单引号都代表字符串

split方法

let str = "111111" 
let str1 = '111111' 
let str2 = "ni hao xiong a"; 
//参数一 以什么切割 参数二 分成多少段 
let str3 = str2.split(" ", 4) 
console.log(str3); 

length属性

获取字符串的字符数

let str = "111111" 
let str1 = '123456' 
console.log(str1.length);

连接字符串+

let str = "111111" 
let str1 = '123456' 
let str2 = str + str1 +"全班同学都很帅"; 
console.log(str2); 
console.log(typeof(str2));

截取字符串substring

let str = "0123456789" 
console.log(str.substring(1,5)); 
console.log(str.substring(1));

数组

let numArr = [1,2,5] //不定义any类型 否则数组元素只能是单一类型

多维数组

let numDuoArr:number[][] = [ [1,5,4], [58,88] ] 
console.log(numDuoArr[0][0]); 
console.log(numDuoArr[0][1]); 
console.log(numDuoArr[1][1]); 

元组

概念

let numArr = [1,2,5] //默认双精度数组 
let numArr2:any[] = [1, 2, 5, "你这瓜多少钱!"] //数组 
let numArr1 = [1 , "十五斤三十块!"] //元组 
两者返回的都是object

运算符

7种 加减乘除 取余 自增 自减

注意:自增自减运算符的前置与后置

关系运算符

用于数值运算的大小判断

  1. ==

  2. !=

  3. >>

  4. <<

  5. >>=

  6. <<=

逻辑运算符

  1. &&

  2. ||

  3. !

位运算符

  1. & and

  2. | or

  3. ~ 取反

  4. ^ 异或

  5. << 左移

  6. >> 右移

  7. >>> 无符号右移

赋值运算符

  1. -=

  2. =

  3. +=

  4. *=

  5. /=

  6. %=

三元运算符

let a = -10; 
console.log( a > 0 ? true: false); 

类型运算符

let b = "1111s" 
console.log(typeof(b));

字符串连接运算符

let str1 = "大家晚上" 
let str2 = "8点" 
let str3 = "来打牌" 
console.log(str1 + str2 + str3);

结构

条件

  1. if

  2. if else

  3. if else if else

  4. switch case defalut

循环

  1. for

  2. for in

  3. for of

  4. while

  5. do while

跳出循环

  1. break

  2. continue

例子

switch 判断值里面 必须为number 或者枚举 
switch (a) { 
    case 1: 
        console.log("a = 1"); 
        break; 
    case 2: 
        console.log("a = 2"); 
        break; 
    case 3: 
        console.log("a = 3"); 
        break; 
    default:
        break; 
}
        
let arr = [5,8,9,5] 
for (let i = 0; i< arr.length; i++) { 
    const element = arr[i]; 
    console.log("输出数组的值", i ," ",element); 
}
​
//for in方法
for (const key in arr) { 
    console.log("输出数组的值------", key ," ",arr[key]); 
}
​
//for of方法
for (const iterator of arr) { 
    console.log("输出数组的值++++++",iterator); 
}
        
for (let index = 0; index < arr.length; index++) 
{ 
    const element = arr[index]; 
    console.log("break输出大大大大大大大大大大大大大",index,"-------",element); 
    if(index == 1)
    { 
        break; 
    } 
}
        
for (let index = 0; index < arr.length; index++) 
{ 
    if(index == 1)
    { 
        continue; 
    }
    const element = arr[index]; 
    console.log("break输出小小小小小小小",index,"-------",element); 
}

函数

定义

function + 函数名 + 形参 +函数体

function test1():number     //:后面是继承
{
}
​
function test1(str:string):number       //()括号里面是限定类型
{
}

调用

函数名()

参数

可选参数

function test1(str:string , str1 ? :string):number
{
}

str1 ? :string指可传可不传的参数

默认参数

function test1(str:string , str1 :string = "NB"):number
{
}

str1 :string = "NB"指不传参数时默认为=“”后面的值

剩余参数

可变参数 又叫做多参数 参数数组

function test1(...nums:any[]):number
{
}

...nums:any[]指可传多个值

匿名函数

let msg = function()
{ 
}

类与对象

详情请点击这里(我师兄的文章)

class stu 
{ 
//类的成员变量 
id:number; 
name:string; 
//构造方法 
    constructor(name:string, id:number) 
    { 
    this.name = name; 
    this.id = id; 
    }
    
    //类的成员方法 
    getName():string
    { 
        return this.name; 
    }
    setName(name:string):void{ 
    console.log("调用了父类的setname方法"); 
    this.name = name; 
    } 
}
​
//类的继承与多态 
class ITStu extends stu 
{ 
static major:string;//专业 
    getMajor()
    { 
        return"你这西瓜不熟啊"; 
    }
    setName(name:string)
    { 
        super.setName(name); 
    } 
}
​
let li = new ITStu("西瓜",1); 
console.log(ITStu.major); 
ITStu.major = "水果摊" 
console.log(ITStu.major);

模块与命名空间

命名空间原文章地址

模块系统

//ES6的模块和Node的模块是不兼容的, 所以TS为了兼容两者就推出了
export = xxx;
import xxx = require('path');

命名空间

命名空间可以看做是一个微型模块,

当我们先把相关的业务代码写在一起, 又不想污染全局空间的时候, 我们就可以使用命名空间

本质就是定义一个大对象, 把变量、方法、类、接口等都放里面

命名空间和模块区别

  • 在程序内部使用的代码, 可以使用命名空间封装和防止全局污染

  • 在程序内部外部使用的代码, 可以使用模块封装和防止全局污染

总结: 由于模块也能实现相同的功能, 所以大部分情况下用模块即可

例子

namespace Validation {//里面的东西不会污染全局空间
    const lettersRegexp = "chongchong"
    export const LettersValidator  = (value) =>{
        return lettersRegexp.test(value);
    }
}

注意

//在ts当中接口和命名空间是可以重名的, ts会将多个同名的合并为一个
// 1.接口
interface test
{
    name:string;
}
​
interface test
{
    age:number;
}
​
//合并后的结果
interface test
{
    name:string;
    age:number;
}
​
class Person implements test
{
    name:string;
    age:number;
}
​
// 1.1同名接口如果属性名相同, 那么属性类型必须一致
interface test 
{
    name:string;
}
​
interface test 
{
    name:number;//报错
}
​
// 1.2同名接口如果出现同名函数, 那么就会成为一个函数的重载
interface test 
{
    getValue(value:number):number;
}
​
interface test
{
    getValue(value:string):number;
}
​
let obj:test = 
    {
    getValue(value:any):number{
        if(typeof value === 'string')
        {
            return value.length;
        }
        else
        {
            return value.toFixed();
        }
    }
}
​
console.log(obj.getValue("123456"));
console.log(obj.getValue(3.14));
​
​
// 2.命名空间
namespace Validation
{
    export let name:string = 'buchong';
}
    
namespace Validation
{
    export let age:number = 18;
}
console.log(Validation.name);
console.log(Validation.age);
​
​
// 1.1同名的命名空间中不能出现同名的变量,方法等
namespace Validation
{
    export let name:string = 'buchong';
    export let say = ()=> "123";
}
    
namespace Validation
{
    export let name:string = 'qw';//错误
    export let say = ()=> "123";//错误
}
    
// 1.2同名的命名空间中其它命名空间没有通过export导出的内容是获取不到的
namespace Validation
{
    let name:string = 'buchong';
}
    
namespace Validation
{
    export let say = ()=>{
        console.log('chong');
    };
}
Validation.say();//不导出 获取不到数值

合并

// 命名空间和类合并
// 注意点: 类必须定义在命名空间的前面
// 会将命名空间中导出的方法作为一个静态方法合并到类中
class Person 
{
    say():void
    {
        console.log('xigua');
    }
}
​
namespace Person
{
    export const huaqiang = ():void=>{
        console.log('bubaoshu');
    }
}
console.dir(Person);
​
​
// 命名空间和函数合并
// 注意点: 函数必须定义在命名空间的前面
function getCounter() 
{
    getCounter.count++;
    console.log(getCounter.count);
}
    
namespace getCounter
{
    export let count:number = 0;
}
​
​
// 命名空间和枚举合并
// 注意点: 没有先后顺序的要求
enum Gender 
{
    Male,
    Female
}
    
namespace Gender
{
    export const Yao:number = 666;
}
console.log(Gender);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值