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);