ts ===函数 约束

// 函数是javascript 的 一等公民

// ts中,一个函数会有 输入 和 输出;要在ts中 对 输入和输出 进行 限制;需要 都考虑

// 函数的 定义?

// 1. 函数声明法
// function fn1(x:number,y:number):void{
//     console.log(x+y)
//     return x + y
// }

// 语法 :  function 函数名(参数1:数据类型,参数2:数据类型):输出的数据类型

// function fn1(x:number,y:number):string{
//     console.log(x+y)
//     return x + y + ''
// }

// fn1(1,10)




// 2. 表达式法
// var fn2 = function(){

// }

// let fn3:(x:number,y:number)=>number = function(x:number,y:number):number{
//     return x + y
// }
// console.log(fn2(1,2));

// 函数 约束

/**
 * 
 *      参数   => 返回值 
 *      
 * 
 */
// let fn2:(x:number,y:number)=>number;

// fn2 = function(x:number,y:number):number{
//     return x + y
// }



// let num:number = 10 // 直接定义好的类型

// let num1 = 10 依靠类型 推论 定义 num1的类型




// 接口约束函数

// let fn1:(x:number,y:number)=>number;
// fn1 = function(x:number,y:number):number{
//     return x + y
// }

// 接口 形式 约束 函数

interface IFun {
    (x: number, y: number): number
}

let fn1: IFun;
fn1 = function (x: number, y: number): number {
    return x + y
}

 什么是ts  添加了类型系统的js,适用于任何规模

         ts的特性: 类型系统 任何规模

        特征:

        ts的数据类型:

         number string boolean null undefined any void enum array tuple never..

         类型 推论

       没有制定类型;ts会自动推测出一个类型

==================================================================================================================================================

// 数组 元组  str  num  booolean .....
// 万物皆 对象
// [1,2,3,4,5,6]  [{},{},{}]

// 接口:在 ts中 ; 我们可以使用 接口 (interface)来 定义 或者约束 对象

// 面向对象的编程语言中,接口 是一个 很重要的概念;对行为进行抽象

// ts 可以 对 对象的 形状 进行 描述

// 定义了 一个 用户的接口;用这个 接口 来约束 每一个 用户

// 接口的 语法 :

/****
 * 
 * interface 接口名字 {
 *  key: value,
 *  key1:value1
 *  
 * }
 * 
 * 
 */


/**
 * 定义用户接口 IUser {
 *  name:用户姓名,必须是字符串
 *  age: 用户年纪,必须是 数字类型
 *  
 * }
 * 
 */
// interface IUser {
//     name: string,
//     age: number,
// }

// let lily:IUser = {
//     name: '',
//     age: 10
// }

// let num:number = 1

// 接口 约束 对象 ;增加 变量 和 减少变量是不允许的;赋值的时候;对象的形状和 接口的形状必须保持一致
// lily.gender = '女'



// 2. 可选属性 约束类型的时候 添加一个 ?

// 定义一个 接口;并且用这个 接口去 约束 对象;用户的电话 号码  是 选填的
// interface IUser {
//     name: string,
//     age: number,
//     tel?: number
// }

// let tom:IUser = {
//     name: 'tom',
//     age: 10
// }
// //可选属性可以填写 也可以不填写
// tom.tel = 1

// 但是 不能添加 其他属性
// tom.gender = 'nan' // 报错



// 3. 任意 属性  

// 语法 [prop:string]: any

// 一旦添加了 任意类型,其他类型必须是 任意类型的 字类型

// interface IUser {
//     username: string,
//     password: string,
//     isgrow: boolean,
//     age: number,
//     [prop:string]: any
// }

// let user:IUser = {
//     username: '',
//     password: '',
//     isgrow: true,
//     age:10
// }
// user.weixin = 'ad'
// user.tel = '1'


// 只读 的 属性  在 接口变量   前 添加 readonly

interface IObj {
    readonly id: number,
    name: string,
    tel: number
}

let  user:IObj = {
    id: 1,
    name: '',
    tel: 1
}

// 只读 属性  约束的是 第一次 给 对象 赋值的时候;而不是 第一次 给 只读 属性 赋值的时候
// user.id = 1

user.name = 'ad'

// 用 接口 约束 ajax

// function ajax(params){
//     var xhr = new XMLHttpRequest()
//     xhr.open(params.method,params.url)
//     xhr.send(params.data)

//     xhr.onreadystatechange = function(){

//     }
// }


==================================================================================================================================================

封装AJAX

// 封装 一个 ajax,使用接口 约束  参数

//  定义一个接口 约束 ajax的传参数
// interface Iparams {
//     method: string,
//     url: string,
//     data?: any
// }

/***
 * params参数 必传 method
 * params参数 必传 url
 */

// function ajax(params:Iparams){
//     // 实例化 ajax的 核心对象;是因为这个核心 对象 是在 浏览器内 内置的
//     let xhr = new XMLHttpRequest()
//     // open  建立连接 (请求方式,)
//     // 请求 方式:  get post put  delete option head ...
//     xhr.open(params.method,params.url)

//     // 发送请求

//     xhr.send(params.data)

//     // 接收 ajax返回的数据

//     xhr.onreadystatechange = function(){
//         if(xhr.readyState==4 && xhr.status == 200){
//             console.log(xhr.response)
//         }
//     }
// }

// 别人调用 你封装的 ajax的时候
// ajax({method: 'get',url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata'})




 // 2. 可索引的 接口  接口可以约束 对象/ 数组 了解的知识点  -- 用的不多

// interface IOBj {
//     [a:string]: string
// }

// let obj:IOBj = {
//     name:'',
//     age: '' 
// }

interface Iarr {
    [a:number]: string
}

// let arr:Iarr = ['','',1]// 报错






//自己的代码
// 接口  约束  ajax

// interface IUrldata {
//     url: string,
//     data?: any,
//     method: string
// }

// let params: IUrldata = {
//     url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',
//     data: '',
//     method: 'get'
// }


// function ajax(params: IUrldata) {
//     //创建异步对象
//     var xhr = new XMLHttpRequest()
//     //设置请求行open()
//     xhr.open(params.method, params.url)
//     //发送请求
//     xhr.send(params.data)

//     xhr.onreadystatechange = function () {
//         if (xhr.readyState == 4 && xhr.status == 200) {
//             console.log(xhr.response);
//         }
//     }
// }
// ajax(params)

联合

// 联合 类型: 变量的取值 可以为 多个数据类型的 一种

// 想声明 一个 变量 ; 这个 变量 可以是 数字 或者 字符串类型;不能是其他类型

// let a:any = 1 // 不可以

// let a:string|number = 1

// a = 'hello'

// a = 10

// a = true // 错误的




// 元组  越界值 的时候;其他数据 需 符合联合 类型

// let arr:[string,number] = ['',1]

// arr.push(1)

// arr.push(true)


版权声明:本文为jia632133535原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。