node-ts基本使用

node.ts

一.node.ts使用
第一个node.ts程序

const mes:string="hello world ts";
console.log(mes);

二.node.ts变量声明

let a = 25;// 全局变量
class test {
    num = 1; //实例变量
    static x = 123; //静态变量

    queryIndex(mes: string): string {
        let c: string = "5555"; // 局部变量
        return c;
    }
}

三.node.ts基本类型&变量声明

//  定义数据类型

//字符串类型  一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式
const num: number = 5;  //数值类型
const msg: string = "666"; // 字符串类型
const words: string = `您好,今年是 ${msg} 发布 ${num + 1} 周年`;


// boolean 类型
const flag: boolean = true; //默认值为true | false


// 数组类型
const arr: number[] = [1, 2, 3, 4];  // number类型数组
const arrStr: string[] = ["1", "2", "3", "4"]; //string类型数组
const anyArrNum: Array<number> = [1, 2, 3, 4];  //定义泛型(number)数组
const anyArrStr: Array<string> = ["1", "2", "3", "4"];  //定义泛型(number)数组


// 元组类型数组
let resArr: [number, string];
resArr = [1, "666"];// 不遵循这个规则,编译无法通过
// resArr=["6666",1];


// 枚举
enum Color {
    Red, Green, Blue
}

//使用枚举
let red = Color.Red;


// 方法定义  void标识无返回值
function queryUser(): void {
    alert("hello world");
}

// 返回string
function queryUserStr(): string {
    return "hello";
}

// 返回number
function queryUserNum(): number {
    return 1;
}

// any 任意类型
// 常量
let x: any;
x = 1;
x = "666";
x = true;
// 数组
let y: any[];
y = [1, "666", false];


// null & undefined
null; //表示空,即没有值
undefined; //表示未定义类型变量


//never  never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never
// 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环),示例代码如下:


function f(): void {
    let x: never;
    let y: number;

    // x=1; //数字类型不能转为never类型:编译出错
    y = 1;
    // 定义异常  never 类型可以赋值给 never类型
    x = (() => {
        throw new Error('exception')
    })();
    // never 类型可以赋值给 number类型
    y = (() => {
        throw new Error('exception')
    })();

    // 异常处理方法
    function error(message: string): never {
        throw new Error(message);
    }

    // while循环
    function arras():never{
        while (true){}
    }
}
//  never类型用于异常,never类型以及 while(true(无限))循环

四.node.ts运算符

// 运算符 +,-,*,/,取模% ,++,--

function operato(): void {
    let num: number = 6;
    let a: number = 2;

    let x = num - a; //-
    console.log(x);
    let x1 = num + a; //+
    console.log(x1);
    let x2 = num * a; //*
    console.log(x2);
    let x3 = num / a; // /
    console.log(x3);
    let x4 = num--; //--
    console.log(x4);
    let x5 = num++; //++
    console.log(x5);
}

五.node.ts条件语句


export class user {
    static x=1;
//  if判断
    queryUser(id: string): string {
        if (Number.parseInt(id) > 0 && id != null) {
            return id;
        } else {
            throw new Error("id为空");
        }
    }


    // switch break语句
    static switch(x:number):void{
        switch (x) {
            case 1:
                console.log(x);
                break;
            case 2:
                console.log(x);
                break;
            case 3:
                console.log(x);
                break;

            default:
                console.log(x);
        }
    }

}

六.node.ts循环

/**
 * for 循环
 */
export class User {

    //  普通for循环
    defaultFor(): void {
        let num: number = 5;
        let i: number;
        let factorial = 1;

        for (i = num; i >= 1; i--) {
            factorial *= i;
        }
        console.log(factorial)
    }

    // for in循环
    forIn(): void {
        let j: any;
        let n: any = "a,b,c";
        // for in用于一组值的集合或者列表输出
        for (j in n) {
            console.log(n[j]);
        }
    }

    // for of循环
    // 此外,TypeScript 还支持 for…of 、forEach、every 和 some 循环。
    //
    // for...of 语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,
    // 并支持新的迭代协议。for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等
    forOf(msg: string): void {
        let someArray = [1, "string", false];
        for (let entry of someArray) {
            console.log(entry); // 1, "string", false
        }

    }

    // for...each 循环 属于js内的语法
    foreEach(): void {
        let list = [4, 5, 6];
        list.forEach((val, idx, array) => {
            console.log(val + "===" + idx + "===" + array)
            // val: 当前值
            // idx:当前index
            // array: Array
        });
    }

    // forEvery循环 ts
    forEvery(): void {
        let list = [4, 5, 6];
        list.every((val, idx, array) => {
            console.log(val + "===" + idx + "===" + array)
            // val: 当前值
            // idx:当前index
            // array: Array
        });
    }

    // while 循环
    while(): void {
        let num: number = 5;
        let fac = 1;
        while (num > 1) { //小于1的时候跳出循环
            fac = fac + 1;
            num--;
        }
        console.log("fac为:" + fac);
    }

    // do...while循环
    doWhile(num: number): void {
        do {
            console.log(num);
            num--;
        } while (num >= 0); // 小于0的时候跳出循环
    }

    // break
    break(): void {
        let i: number = 1;
        while (i <= 10) {
            if (i % 5 == 0) { //结果为0的时候跳出循环
                break;
            }
            i++;
        }
    }


    // continue
    continue(): void {
        let num = 0;
        let count = 0;
        for (num = 0; num < 20; num++) {
            if (num % 2 == 0) { //num%2 ==0 跳过继续执行
                continue;
            }
            count++;
        }
    }

    // 无限循环
    whileTrueOrFor():void{
        while (true){
            console.log('aaaa');// 一直打印
        }

        for(;;){
            console.log(";;;;")// 一直打印
        }
    }
}

七.node.ts函数

export class Method {

    // 不带返回值method
    methodVoid(msg: string): void {
        console.log(msg);
    }

    // 返回string
    stringMethod(msg: string): string {
        console.log(msg);
        return msg;
    }

    // 返回number
    numberMethod(num: number): number {
        return num + 1;
    }

    // 返回number数组
    numArrMethod(num1: number, num2: number): number[] {
        let num: number[] = [num1, num2];

        for (let number of num) {
            if (number<0){
                throw new Error("返回值不能<于0");
            }else {
                // 往数组当中添加新的元素
             num.push(number);
            }
        }
        return num;
    }

    // 返回string数组
    stringArr(mesArr: string, mes: string): string[] {
        let msg: string[] = [mesArr, mes];
        return msg;
    }

    // 返回任意类型数组
    anyMethod(mes: string, age: number): any[] {
        let anyArr: any[] = [age, mes];
        return anyArr;
    }

    // //方法重载和上一个anyMethod一样
    // anyMethod(mes: string): string {
    //     let msg: string = mes;
    //     return msg;
    // }


}

/**
 * class里面定义method 不用加function,class外需要加function
 * @param num
 */


export function f(num: number): number {
    return num;

}

// function f(num: number,num1:number): number {
//     return num+num1;
//
// }


八.node.ts Number

export class Number{
    id: number | undefined;
    name: string | undefined;
    email: string | undefined;
    queryUserAge(name:string,age:number):string{
        return name+"===="+age;
        // 1.MAX_VALUE 最大值
        // 可表示的最大的数,MAX_VALUE 属性值接近于 1.79E+308。大于 MAX_VALUE 的值代表 "Infinity"。

        // 2.MIN_VALUE
        // 可表示的最小的数,即最接近 0 的正数 (实际上不会变成 0)。

        // 3.NaN
        // 非数字值(Not-A-Number)。

        // 4.NEGATIVE_INFINITY
        // 负无穷大,溢出时返回该值。该值小于 MIN_VALUE。

        // 5.POSITIVE_INFINITY
        // 正无穷大,溢出时返回该值。该值大于 MAX_VALUE。

        // 6.prototype
        // Number 对象的静态属性。使您有能力向对象添加属性和方法。

        // 7.constructor
        // 返回对创建此对象的 Number 函数的引用。


        //8.number.toFixed返回指定数值和控制小数位数
        // toFixed()
        // 把数字转换为字符串,并对小数点指定位数。



    }
    //nan
    nan():void{
        var month = 0
        if( month<=0 || month >12) {
            // month = Number.NaN;
            console.log("月份是:"+ month)
        } else {
            console.log("输入月份数值正确。")
        }
    }

    prototype(id:number,name:string){
        this.id = id
        this.name = name
    }

    test(){
        // @ts-ignore
        let emp = new Number.prototype(123,"admin")
        Number.prototype.email = "admin@runoob.com"

        console.log("员工号: "+emp.id)
        console.log("员工姓名: "+emp.name)
        console.log("员工邮箱: "+emp.email)
    }
}

九.node.ts String

let txt = new String("string");
// 或者更简单方式:
let txt1= "string";

//字符串长度
console.log(txt1.length);
//去空
console.log(txt1.trim());
// 拼接字符串
console.log(txt.concat(txt1));

//指定位置字符
console.log(txt1.charAt(0));

//查找字符串位置(角标)
console.log(txt1.indexOf("t"));

//match()
// 查找找到一个或多个正则表达式的匹配。
console.log(txt1.match(/tr/g));

//替换
let re = /(\w+)\s(\w+)/;
let stra = "zara ali";
let newstr = stra.replace(re, "$2, $1");
console.log(newstr); // ali, zara

//提取索引之间的字符
var str = "RUNOOB GOOGLE TAOBAO FACEBOOK";
console.log("(1,2): "    + str.substring(1,2));   // U
console.log("(0,10): "   + str.substring(0, 10)); // RUNOOB GOO
console.log("(5): "      + str.substring(5));     // B GOOGLE TAOBAO FACEBOOK

// 将字符串转为大写
let strs = "Runoob Google";
console.log(strs.toLocaleUpperCase( ));  // RUNOOB GOOGLE
let s1 = "Runoob Google";
console.log(s1.toUpperCase( ));  // RUNOOB GOOGLE

//将字符串转为小写
let s = "Runoob Google";
console.log(s.toLowerCase( ));  // runoob google


//返回对象原来的值
let seix = new String("Runoob");
console.log(seix.valueOf( ));  // Runoob





十.node.ts Map

export class Maps {

    queryUser(): void {
        // 创建map
        let maps = new Map();
        // 赋值
        maps.set("age", 21);
        maps.set("name", "李四");
        console.log(maps.get("age") + "===" + maps.get("name"));

        // 判断map是否包含对应值
        console.log(maps.has("name"));

        // 移除对应值
        console.log(maps.delete("name"));

        // map长度
        console.log(maps.size);

        // 遍历map
        // 迭代 Map 中的 key
        for (let key of maps.keys()) {
            console.log(key);
        }
        // 迭代map中的value
        for (let value of maps.values()) {
            console.log(value);
        }

        //迭代map中key-value
        for (let kv of maps.entries()){
            console.log(kv[0],kv[1]);
        }

        //使用对象解析
        for (let [key,value] of maps){
            console.log(key,value);
        }
    }
}


十一.node.ts 联合类型

//联合类型
let val:string|number;
val="6666";
console.log("字符串为:"+val);
val=666;
console.log("数值为:"+val);

//将联合类型作为参数使用
function lianheType(val:string|number){
    // 校验是否是字符串类型
    if (typeof val=="string"){
        console.log(val);
    }else{
        console.log(val);
    }
}

function lianHeArray(val:string[]|number) {
    if (typeof val=="number"){
        console.log(val);
    }else {
        for (let str of val) {
            console.log(str);
        }
    }
}
// lianheType("hello");
// lianheType(2323);
let strVal:string[]=["1","2","3"];
lianHeArray(123);
lianHeArray(strVal);

十二.node.ts 接口

// ts接口使用定义为需要实现的接口类型实现方法就可以了

interface IPerson {
    firstName: string;
    lastName: string;
    // 定义一个返回类型为string 类型method
    sayHello: () => string;

    // 定义一个返回类型为string,参数类型为string的method
    sayHellos: (msg: string) => string;
}

let customer: IPerson = {
    firstName: "java", lastName: "Mr.", sayHello(): string {
        return "hello java";
    }, sayHellos(msg: string): string {
        return msg + "msg";
    }
}

console.log(customer.sayHello);
console.log(customer.firstName);
console.log(customer.lastName);
console.log(customer.sayHellos("你好"));

// 联合类型和接口一起使用
interface IPersonPlus {
    program: string;
    com: string[] | string | (() => string);
}

let IPersonaPlus: IPersonPlus = {
    com: "hello", program: "你好"
}

let ms: string[] = ["1", "2", "3"];
let IPersonaPlus1: IPersonPlus = {
    com: ms, program: "你好"
}

console.log(IPersonaPlus.com + ",===" + IPersonaPlus.program);
console.log(IPersonaPlus1.com + ",===" + IPersonaPlus1.program);

十三.node.ts 类class


class Car {
    //字段
    engine:string;

    // 构造函数
    constructor(engine: string) {
        this.engine = engine;
    }
    disp():void{
        console.log("发动机型号为:"+this.engine);
    }
}

//获取对象实例

let car=new Car("H0104");
// 访问属性
console.log(car.engine);
// 访问method
car.disp();

// 继承(子类继承父类)

class CarSub extends Car{
    area:number;

    constructor(engine: string, area: number) {
        super(engine);
        this.area = area;
    }

    disps():void{
        console.log("Parent:"+this.engine+"===Sub"+this.area);
    }
}

CarSub carSub=new CarSub("1023",123);
carSub.disps();

十四.对象(objcet)

// 对象实例
var object_name = {
    key1: "value1", // 标量
    key2: "value",
    key3: function () {
        // 函数
    },
    key4: ["content1", "content2"] //集合
}

let sites = {
    site1: "123456",
    site2: "54321",
    sayHello: function () {
    } //类型魔板
};
// 往方法当中传递参数
sites.sayHello = function () {
    console.log(sites.site1);
};
//传递对象
let invokeSites = function (obj: { site1: string, site2: string }) {
    console.log("site1:" + obj.site1 + "===site2:" + obj.site2);
}

//自定义传递对象测试
let say = {
    name: "张三",
    age: 22,
    sex: [22, 33, 44],
    ageMap: {age1: 1, age2: 2, age3: 4} // 自定义集合
}
let sayTest = function (say: { name: string, age: number, sex: number[], ageMap: {} }) {
    if (say.sex.length > 0) {
        console.log("name:" + say.name + "=====age:" + say.age + "======ageMap.age1:" + say.ageMap.age1);
        for (let sex of say.sex) {
            console.log(sex);
        }
    } else {
        throw new Error("性别不能为null");
    }
}
console.log(sites.site1 + "===" + sites.site2);
sites.sayHello();
invokeSites(sites);

sayTest(say);
上一篇:Codeforces Problem-25A IQ Test


下一篇:EBS2043