一天入门typescript

https://www.jianshu.com/p/0e37a793ac3a

https://typescript.bootcss.com/basic-types.html

https://www.tslang.cn/docs/handbook/typescript-in-5-minutes.html

class Greeter {

greeting: string;

constructor(message: string) {

this.greeting = message;

};

name:string="Henry";

uid:number=10086;

greet() {

return "Hello, " + this.greeting;

};

}

let greeter = new Greeter("world");

console.log(greeter.greet());

console.log("");

////===================for循环

console.log("=============== for");

var num:number = 5;

var i:number;

var result = 1;

for(i = num;i>=1;i--) {

result *= i;

}

console.log(result)

////===================for...in

console.log("=============== for...in");

var n:any = [1,2,3,4,5]

for(var j in n)

{

console.log("%d %d", j, n[j]);

}

//=============== for...of

console.log("=============== for...of");

let someArray = [1, "stringABCDE", false];

for(let entry of someArray)

{

console.log(entry); // 1, stringABCDE, false

}

//=============== forEach

console.log("=============== forEach");

let list = [4,5,6];

list.forEach((val, idx, array)=>{

// val: 当前值

// idx: 当前index

// array: Array

console.log("val:%d, idx:%d", val, idx);

console.log(array);

})

//=============== every

console.log("=============== every");

let list2 = [4,5,6];

list2.every((val, idx, array)=>{

// val: 当前值

// idx: 当前index

// array: Array

console.log("val:%d, idx:%d", val, idx);

console.log(array);

return true; //Contiunes

//Return false will quite the iteration

})

//=============== while

console.log("=============== while");

var num:number = 5;

var factorial:number = 1;

while(num >=1) {

factorial = factorial * num;

num--;

}

console.log("5 的阶乘为:"+factorial);

console.log("===================== function ================");

// 函数定义

function greet():string { // 返回一个字符串

return "call function : Hello World"

}

function caller() {

var msg = greet() // 调用 greet() 函数

console.log(msg)

}

// 调用函数

caller()

console.log("============ function ======= with para =========");

function add(x: number, y: number): number {

return x + y;

}

console.log(add(1,2))

console.log("===== function ==== 可选参数和默认参数 =========");

function calculate_discount(price:number,rate:number = 0.50) {

var discount = price * rate;

console.log("计算结果: ",discount);

}

calculate_discount(1000)

calculate_discount(1000,0.30)

console.log("===== function === 参数个数不确定 ========");

function buildName(firstName: string, ...restOfName: string[]) {

return firstName + " " + restOfName.join(" ");

}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

console.log(employeeName);

function addNumbers(name:string, ...nums:number[]) {

var i;

var sum:number = 0;

console.log("%s,不定参数个数测试.", name);

for(i = 1;i<nums.length;i++) {

sum = sum + nums[i];

}

console.log("和为:",sum)

}

addNumbers("test1", 1,2,3)

addNumbers("test2",10,10,10,10,10)

//====================[匿名函数]==================

console.log("");

var msg = function() {

return "hello world.ni ming function.";

}

console.log("不带参 匿名函数: " + msg())

var res = function(a:number,b:number) {

return a*b;

};

console.log("带参数,匿名函数: " + res(12,2));

(function () {

var x = "Hello!!";

console.log("匿名函数自调:" + x)

})();

var myFunction = new Function("a", "b", "return a * b");

var x = myFunction(4, 3);

console.log("内置构造函数 定义函数: " + x);

function fibos_fun(num:number) :number{

if (num <= 0) { // 停止执行

return 1;

} else {

return (num + fibos_fun(num - 1)); // 调用自身

}

};

console.log("fibos_fun: " + fibos_fun(6)); // 输出 720

//============= Lambda函数,也成为箭头函数

// ( [param1, parma2,…param n] )=>statement;

var foo = (x:number)=>10 + x

console.log(foo(100)) //输出结果为 110

//Lambda函数 作为语句块 赋值给一个 变量

var fooA = (x:number)=> {

x = 10 + x

console.log(x)

}

fooA(100)

//=======================

var func = (x:any)=> {

if(typeof x=="number") {

console.log(x+" 是一个数字")

} else if(typeof x=="string") {

console.log(x+" 是一个字符串")

}

}

func(12)

func("Tom")

var disp =()=> {

console.log("Function invoked.无参的时候,可以设置空括号.");

}

disp();

//==================函数的重载

console.log("=======函数的重载======参数不同...");

function dispA(s1:string):void;

function dispA(n1:number,s1:string):void;

function dispA(x:any,y?:any) {

console.log(x);

console.log(y);

}

dispA("abc") ;// abc,undefined

dispA(1,"xyz");// 1,xyz

console.log("TypeScript Number 属性: ");

console.log("最大值为: " + Number.MAX_VALUE);

console.log("最小值为: " + Number.MIN_VALUE);

console.log("负无穷大: " + Number.NEGATIVE_INFINITY);

console.log("正无穷大:" + Number.POSITIVE_INFINITY);

console.log("");

// ////可以正常转为js,但是在vs下面有错误提示...

// function employee(id:number,name:string) {

// this.id = id

// this.name = name

// }

// var emp = new employee(123,"admin")

// console.log("添加 email 属性");

// employee.prototype.email = "admin@runoob.com"

// console.log("员工号: "+emp.id)

// console.log("员工姓名: "+emp.name)

// console.log("员工邮箱: "+emp.email)

//========================== String

var str = new String( "This is string" );

console.log("str.constructor is:" + str.length)

// var strA1 = new String( "RUNOOB" );

// var strA2 = new String( "GOOGLE" );

// var strA3 = strA1.concat( strA2 );

// console.log("str1 + str2 : "+strA3) // RUNOOBGOOGLE

var strA4 = new String( "aThis is beautiful string" );

var index = strA4.localeCompare( "This is beautiful string");

console.log("localeCompare first :" + index ); // 0

var strA5 = "Runoob Google";

console.log(strA5.toLowerCase( )); // runoob google

var strA6 = "Runoob";

console.log(strA6.toString( )); // Runoob

var strA7 = "Runoob Google";

console.log(strA7.toUpperCase( )); // RUNOOB GOOGLE

//======================数组================

var sites:string[];

sites = ["Google", "Runoob", "Taobao"];

console.log(sites);

console.dir(sites);

var testB = ["abc", 1,2,3,"google"];

console.dir(testB);

testB[0] = testB[0] + 666;

testB[1] = testB[1] + 777;

console.dir(testB);

if(typeof(testB[0]=='string'))

{

console.log("testB[0] is string.");

}

else if(typeof(testB[0]=='number'))

{

console.log("testB[0] is number.");

}

if(typeof(testB[1]=='string'))

{

console.log("testB[1] is string.");

}

else if(typeof(testB[1]=='number'))

{

console.log("testB[1] is number.");

}

// [ 'abc666', 778, 2, 3, 'google' ]

var arr_names:number[] = new Array(4)

for(var i = 0; i<arr_names.length; i++) {

arr_names[i] = i * 2

console.log(arr_names[i])

};

console.dir(arr_names);

//=================

var sitesStr:string[] = new Array("Google","Runoob","Taobao","Facebook")

function dispStr(arr_sites:string[]) {

for(var i = 0;i<arr_sites.length;i++) {

console.log(arr_sites[i])

}

}

dispStr(sitesStr);

///数组的 foreach 属性

let numA = [7, 8, 9];

numA.forEach(function (value) {

console.log(value);

});

////

console.log("pop()删除数组最后面的一个元素");

var numbers = [1, 4, 9];

var element = numbers.pop();

console.log("element is : " + element ); // 9

var element = numbers.pop();

console.log("element is : " + element ); // 4

console.log("tuple----------->>>>");

var mytuple = [10,"Runoob"];

console.log(mytuple);

//=========================

console.log("----->>>联合类型<<<-------");

function disp_union(name:string|string[]) {

if(typeof name == "string") {

console.log(name)

} else {

var i;

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

console.log(name[i])

}

}

}

disp_union("Runoob")

console.log("输出数组....")

disp_union(["Runoob","Google","Taobao","Facebook"])

//=================接口

console.log("------------接口------------");

interface IPerson{

firstName:string,

lastName:string,

sayHi:()=>string

};

var customer:IPerson={

firstName:"Tom",

lastName:"Hanks",

sayHi:():string=>{return "Hi, there."}

};

customer.firstName = "henry";

console.log("customer 对象 ");

console.log(customer.firstName);

console.log(customer.lastName);

console.log(customer.sayHi());

var employee:IPerson={

firstName:"Jim",

lastName:"Blakes",

sayHi:():string=>{return "hello!!!!"}

};

console.log("Employee 对象 ");

console.log(employee.firstName);

console.log(employee.lastName);

console.log("==============联合类型和接口=============");

interface RunOptions {

program:string;

commandline:string[]|string|(()=>string);

}

// commandline 是字符串

var options:RunOptions = {program:"test1",commandline:"Hello"};

console.log(options.commandline)

// commandline 是字符串数组

options = {program:"test1",commandline:["Hello","World"]};

console.log(options.commandline[0]);

console.log(options.commandline[1]);

// commandline 是一个函数表达式

options = {program:"test1",commandline:()=>{return "**Hello World**";}};

var fn:any = options.commandline;

console.log(fn());

console.log("==========接口和数组==========");

interface namelist {

[index:number]:string

}

//var list2:namelist = ["John",1,"Bran"] // 错误元素 1 不是 string 类型

interface ages {

[index:string]:number

}

var agelist:ages = ["John",1,"Bran"];

agelist["John"] = 15 // 正确

// agelist[2] = "nine" // 错误

console.dir(agelist);

console.log("============单继承实例==========");

interface Person {

age:number

} ;

interface Musician extends Person {

instrument:string

} ;

var drummer = <Musician>{};

drummer.age = 27 ;

drummer.instrument = "Drums" ;

console.log("年龄: "+drummer.age);

console.log("喜欢的乐器: "+drummer.instrument);

var drummer2 = <Musician>{};

drummer2.age = 666

drummer2.instrument = "abcdefg"

console.log("年龄: "+drummer2.age);

console.log("喜欢的乐器: "+drummer2.instrument);

console.log("===========多继承实例========")

interface IParent1 {

v1:number

};

interface IParent2 {

v2:number

} ;

interface Child extends IParent1, IParent2 { } ;

var Iobj:Child = { v1:12, v2:23} ;

console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2);

console.log("========== TypeScript类 ==========")

class Person{};

class Car {

// 字段

engine:string;

// 构造函数

constructor(engine:string) {

this.engine = engine

}

// 方法

disp():void {

console.log("发动机为 : "+this.engine)

}

}

var objCar = new Car("Engine 1");

objCar.disp();

objCar.engine = "Engine 2";

objCar.disp();

//============= 类继承 extend ============

class Shape {

Area:number

constructor(a:number) {

this.Area = a

}

}

class Circle extends Shape {

disp():void {

console.log("圆的面积: "+this.Area)

}

}

var obj = new Circle(223);

obj.disp()

console.log("==========继承类的方法重写==========");

class PrinterClass {

doPrint():void {

console.log("父类的 doPrint() 方法。")

}

}

class StringPrinter extends PrinterClass {

doPrint():void {

super.doPrint() // 调用父类的函数

console.log("子类的 doPrint()方法。")

}

}

var abc = new StringPrinter();

abc.doPrint();

class Encapsulate{

str1:string="hello"

private str2:string = "world"

};

var objEncapsulate = new Encapsulate();

console.log(objEncapsulate.str1);

//console.log(objEncapsulate.str2);

console.log("=========类和接口======");

interface ILoan {

interest:number

}

class AgriLoan implements ILoan {

interest:number

rebate:number

constructor(interest:number,rebate:number) {

this.interest = interest

this.rebate = rebate

}

}

var objAgri = new AgriLoan(10,1)

console.log("利润为 : "+objAgri.interest+",抽成为 : "+objAgri.rebate )

//=================TypeScript对象===============

var object_name = {

key0:123,

key1:"valu1" ,//标量

key2:"value2",

key3:function(){ //函数

console.log("object_name...key3..func");

},

key4:["content1", "content2", 1,2,3,4], //集合

key5:[1,2,3,4,5,6] //数组

};

// var obj_name1 JSON.parse(JSON.stringify(object_name));

// var obj_name2 JSON.parse(JSON.stringify(object_name));

// var obj_name3 JSON.parse(JSON.stringify(object_name));

// obj_name1.key0 = 999;

// obj_name1.key1 = "111";

// obj_name1.key2 = "222";

// obj_name2.key0 = 333;

// obj_name2.key1 = "444";

// obj_name2.key2 = "555";

// obj_name3.key0 = 666;

// obj_name3.key1 = "777";

// obj_name3.key2 = "888";

// console.log("obj_name--------->>>>>start");

// console.log(obj_name1);

// console.log(obj_name2);

// console.log(obj_name3);

// console.log("obj_name--------->>>>>end");

var siteA = {

site1:"Runoob",

site2:"Google"

};

//访问对象的值

console.log(siteA.site1);

console.log(siteA.site2);

console.log("如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:");

/// <reference path = "SomeFileName.ts" />

interface PersonT1 {

firstName: string;

lastName: string;

};

var personA = <PersonT1>{};

personA.firstName = "HenryA";

personA.lastName = "HeA";

var personB = <PersonT1>{};

personB.firstName = "HenryB";

personB.lastName = "HeB";

var personC = <PersonT1>{};

personC.firstName = "HenryC";

personC.lastName = "HeC";

console.dir(personA);

console.dir(personB);

console.dir(personC);