IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> typescript 的认识1 -> 正文阅读

[JavaScript知识库]typescript 的认识1

let str:string="你好 ts"

let str1:string = "你好,typesrcipe"

let flag:boolean=true

flag=false

let a:number = 1234
console.log(a)



// 我们以前es5语法
var arr=[1, "3232", false]

// 数组类型(array) ts中定义数组有两种方式
// 第一种: 定义数组
let arr1:number[]=[1,2,34,45]
console.log(arr1);
// 第二种定义数组的方式
let arr2:Array<number>=[1,2,32,4545,34]


// 元祖类型(tuple)属于数组的一种
let arr3:[string,number,boolean] = ["ts", 2.3, true]

// 枚举类型
enum Flag {success=1, error=-1}
var f:Flag=Flag.success
console.log(f);     //1


// enum Color {red, blue, oragne}
// var c:Color=Color.blue
// console.log(c);     //输出:1,如果我们没给里面的值赋值的话,就是默认的索引位置


enum Color {red, blue=5, oragne}
var c:Color=Color.red
var c1:Color=Color.blue
var c2:Color=Color.oragne
console.log(c);     //输出: 0
console.log(c1);     //输出: 5
console.log(c2);     //输出: 6,因为没有赋值,以orange为基准,加1



// #任意类型(any)
var num:number = 123;
// num ='strinnum';        //报错
// 我们需要这么定义
var num1:any = 1324;
num1 = "string"            //编译通过
//任意类型的用处
var oBox:any = document.getElementById('box')
oBox.style.color='red'


// null 和 undefined 其他(never类型)数据类型的子类型
var num:number;
console.log(num);   //输出: undefined

var num11:undefined;
console.log(num11);   //输出: undefined

var num11:undefined | undefined;
console.log(num11);   //输出: undefined

// 一个元素可能是number类型,也可能是null 可能是undefined
var num2:number | null | undefined
console.log(num2);

// void类型: typescript中的void表示没有任何类型,一般用于定义方法的时候方法没有返回值
// es5的定义方法: 我们之前定义方法是这么定义的
function run(){
    console.log('run');
}
run();
// 在ts中,如果该方法没有返回值
function run1():void{
    console.log('run1');
}


// never类型: 是其他类型(包括null和undefined)的子类型,代表从不会出现的值
// 这意味着声明never的变量只能被never类型所赋值
var a3:undefined;
a3=undefined;

var b:null;
b=null;

var n:never;
//n=132;    //错误的写法
n =(() =>{
    throw new Error('错误')
})()



// 4函数的定义
// 4.1es5定义函数的两种方法
// 第一种: 函数声明法
function run11(){
    return 'run11';
}
run11()
// 第二种:匿名函数 
var run22 = function(){
    return 'run2'
}
run22();

//4.2ts中,我们是这么定义函数的的:
// 第一种:函数声明法
function srun():string{
    // return 123    //错误写法
    return 'srun'
}
// 第二种:匿名函数 
var srun2 = function():string{
    return 'srun2'
}
srun2();    /*调用方法 */

//4.3ts定义方法传参
// 第一种
function getInfo(name:string, age:number):string{
    return  `${name}----------${age}`;
}
getInfo("yicheng", 13)

// 第二种
var getInfo1=function(name:string, age:number):string{
    return  `${name}----------${age}`;
}
getInfo1("yicheng", 13)

// 没有方法的返回值
function vrun():void{
    console.log('vrun.');
    
}

// 4.4方法可选参数
// es5中里面方法的实参和形参可以不一样,但是ts中必须一样,如果不一样,需要配置可选参数
// 参数,可传可不传,直接加个 ?
function getInfo2(name:string, age?:number):string{
    if(age){
        return  `${name}----------${age}`;
    }else{
        return  `${name}----------年龄保密`;
    }
}
getInfo2("yicheng")
getInfo2("yichengi", 23)
// 注意: 参选参数必须配置到参数的最后面


// 4.5默认参数
// es5里面没法设置默认参数,es6和ts中都可以设置默认参数
function getInfo22(name:string, age:number=22):string{
    if(age){
        return  `${name}----------${age}`;
    }else{
        return  `${name}----------年龄保密`;
    }
}
getInfo22('yicheng')    //会把20给我们打印出来
getInfo22('yicheng',30) //如果传入30,会把30给我们打印出来

// 4.6剩余参数
function sum(a:number, b:number, c:number, d:number):number{
    return a+b+c+d;
}
// 三点运算符   接受新传递过来的值
// 第一种写法
function sum1(...result:number[]):number{
    var sum = 0;
    for(var i = 0; i < result.length; i++){
        sum += result[i];
    }
    return sum;
}
alert(sum1(1,2,2,33,23))

// 第二种写法
function sum11(a:number, b:number, ...result:number[]):number{
    var sum = a+b;
    for(var i = 0; i < result.length; i++){
        sum += result[i];
    }
    return sum;
}
alert(sum1(1,2,2,33,23))

// 4.7typescript函数重载: 通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
// es5中出现同名方法,下面的会替换上面的方法
function css(config){
    console.log("config");
}
function css(config, value){
    console.log("config, value");
    
}

// ts中的重载
function getInfo3(name:string):string;

function getInfo3(age:number):string;

function getInfo3(str:any):any{
    if(typeof str === 'string'){
        return '我叫:' + str;
    }else{
        return '我的年龄是' + str;
    }
}
alert(getInfo3('张三'))     //正确写法
alert(getInfo3(20))         //正确写法

// alert(getInfo3(true))         //错误写法


// 4.8箭头函数
// this直向的问题, 箭头函数里面的this指向上下文

// es5的写法
setTimeout(function(){
    alert('run')
}, 1000)

// es6写法
setTimeout(() =>{
    alert('run')
})



// 5.类
// 5.1 es5里面定义: 类

// a. 最简单的类
function Person(){
    this.name='张三';
    this.age=20;
}
//不是直接调用,我们需要实例化:
var p = new Person()
p.name;
p.age;

// b. 构造函数和原型链里面增加方法
function Person(){
    this.name='张三';      //属性
    this.age=20;

    this.run = function(){       //实例方法,我们只有通过new后才可以调用,
        alert(this.name + '在运动');
    }
}
// 我们可以通过原型链来扩展属性和方法, 但是,原型链上面的属性会被多个实例共享, 构造不会
person.prototype.sex='男'
person.prototype.work=function(){
    console.log(this.name + '工作');
}

var p = new Person();
alert(p.name)

p.run();
// 这样,我们也可以调用原型链的方法
p.work();

// c.类里面的静态方法
Person.getInfo=function(){
    alert('我是静态方法');
}
// 调用静态方法
Person.getInfo();


// 5.2 Web类 继承Person类, 用得最多得就是原型链 对象冒充的组合继承模式
// 对象冒充
function Web(){
    Person.call(this);  //对象冒充继承
}
//调用
var w = new Web();
w.run();    //对象冒充,可以继承构造函数里面得属性和方法
w.work();   //报错,对象冒充,可以继承构造函数里面得属性和方法,但是没法继承原型链上的属性和方法、


// 原型链继承
function Web(){

}
Web.prototype = new Person();   //原型链实现基础
var w = new Web();
// 原型链实现继承: 可以继承构造函数里面的属性和方法, 也可以继承原型链上面的属性和方法
w.run();
w.work();


// 原型链继承的缺陷
function Person(name, age){
    this.name = name;
    this.age = age;
    this.run = function(){
        alert(this.name + '在运动');
    }
}
Person.prototype.sex = '男'
Person.prototype.work=function(){
    alert(this.name + '在工作')
}

function Web(name, age){

}
Web.prototype = new Person();

var w = new Web('赵四', 20)     //实例化子类的时候无法给父类传参
w.run();



// 5.3、ts中定义类
class Person{
    name:String;    //属性 前面省略了public关键词
     
    constructor(n:string){
        this.name = n;
    }

    run():void{
        alert(this.name)
    }
}
var p = new Person('张三');
p.run();


class Person{
    name:string;   
     
    constructor(name:string){
        this.name = name;
    }

    getName():string{
        return this.name;
    }

    setName(name:string):void{
        this.name = name;
    }
}
var p = new Person('张三');
alert(p.getName());     //张三

p.setName('李四')
alert(p.getName());     //李四


// 5.4、ts中继承: 通过两个关键字 extends、super
class Person{
    name:string;
    constructor(name:string){
        this.name = name;
    }

    run():string{
        return `${this.name}在运动`
    }
}

var p = new Person('王五')
p.run();
class Web extends Person{

}
class Web extends Person{
    constructor(name:string){
        super(name);    //初始化父类的构造函数
    }
}
var w = new Web('李四');  //直接报错, 我们应该改成这样


// 5.5、父类子类探讨: 首先去子类找,再去父类找
class Web extends Person{
    constructor(name:string){
        super(name);    //初始化父类的构造函数
    }

    run():string{
        return `${this.name}在运动-子类`;
    }

    work(){
        alert(`${this.name}在工作`)
    }
}
var w = new Web('李四'); 
alert(w.run()); //  执行的是子类的run()方法

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:23:29  更:2021-11-09 19:25:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 23:28:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码