随着vue3.0的即将到来,是时候学习一下TS了

  简介:TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程

  ts并不是js语言,所以它是不能直接被浏览器识别的,所有从ts到js是有一个转换的过程,我们可以称之为编译。

  ts转化到js和es6到es5是类似的,所以我们借助webpack 构建工具,将要使用的转化插件是ts-loader,和css-loader,style-loader都是差不多的

  https://www.webpackjs.com/guides/typescript/ webpack 使用指南

  webpack 4  安装webpack-cli  创建webpack.config.js 文件

  执行 npm install --save-dev typescript ts-loader 安装转化插件,创建tsconfig.json 配置文件

  整体的项目结构如图

  

  测试一下,我们创建一个ts文件tsdome.js,经过编译后申请bundle.js

  tsdome.ts

function getname():string {
let name: string = "123"
return name
}
console.log(getname())

  最终生成的bundle.js(可以不用关心)

!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){console.log("123")}]);

  最终可以再浏览器打印出123  

  经过上面我们初始开发ts的环境已经搭建完毕

  一、TS基础类型

    布尔值 boolean  数值 number  字符串 string  数组 number[] 或者 Array<number>  元组 Tuple 枚举 enum

    任何类型 Any  空值 void  Null和Underfined  nerver   Object 对象

    下面是所以的类型,以及所以的类型使用

let isdome: boolean = true
let cname: string = '123132'
let age: number = 123
let list: number[] = [1,2,3,4]
let listname: string[] = ['1','2','3','4']
let listarray: Array<number> = [1,2,3,5]
// 元组 对每个元素都进行单独类型定义 ,如果类型对不上就会报错
let yzlist: [number,number,string] = [1,2,'3']
//枚举 (好像有点像对象)
enum Color {red,green,blue}
let c: Color = Color.red
let notsure: any = 4 //不确认类型,可以用any function getbname(): void {
// 表示没有换回值的函数
console.log(123)
}
getbname()
// undefined null 意思不是很大
let und: undefined = undefined
let nl: null = null // never 表示永不存在的值类型,如一些总是抛出错误,或者根本不会有返回值的函数表达式,或者是箭头函数
function error(message: string):never {
throw new Error(message)
}
//object 对象类型
let obj: object = {
a:132
}
// 类型断言
let anykey: any = '七月的风,八月的雨,你的过去,无法参与'
let alength: number = (<string>anykey).length
console.log(alength) let aslength: number = (anykey as string).length
console.log(aslength)

  二、变量申明 let const var

  没什么可说的,es6 es5 ,let表示局部变量,没有申请提升,只能先申明后使用,否则报错,var 略,const,表示常量,赋值后就不能再次改变了。如果值是一个对象,表示地址不能变。

  三、接口

  

// 定义一个父类接口parent 里面有一个name属性
interface parent {
name: string
} function getname(anyamin:parent) {
console.log(anyamin.name)
} //继承于parent的子类必须实现 name属性,要不会报错
getname({name: '123123'}) // 当然接口的属性是可以定义成可选的
interface anany {
name: string,
age?: number,
sex?: string
}
let bbb: anany = {
name: '123132',
}
// bbb可以不去实现sex 和 age ,当然也不能给bbb新增属性,那么也会报错
// 只读属性的定义
interface point {
readonly x: number,
readonly y: number
}
let bp: point = {
x: 123,
y: 123
}
// bp.x = 6 报错,只读属性不能从新赋值 // 函数类型
interface SearchFunc{
//表示一个函数,有两个参数,第一个参数是string类型,第二个参数是number,返回值是void
// x y 为形参,不需要一样
(x: string,y: number): void
}
let func: SearchFunc = function(z: string,b: number) {
console.log(z+b)
}
func('1',2)
// 可索引类型 好像和数组类似,没多大区别
interface stringarrray{
[index: number]: string
}
let arrayname: stringarrray = ['bob','333']
console.log(arrayname[0]) //类 类型 。。。。。。

  类类型

// 类继承接口
//类 类型
interface ClockInterface {
currentTime: string
}
// 定义一个接口,里面有一个currentTime
// 如果使用类去继承他,则必须再构造函数中初始化它
class Clock implements ClockInterface {
currentTime: string
constructor(h: number,m: number){
this.currentTime = '123'
}
} interface parent {
tick(): void, //tick方法,返回值是空
name: string // 属性那么,为string 类型
} class child implements parent {
name: string
constructor(x: string) {
this.name = x
}
tick(): void {
console.log(this.name)
}
}
let c1 = new child('cz')
c1.tick()
// 接口继承接口
interface p1 {
name: string
}
interface p2 extends p1 {
age: number
}
class c1 implements p2 {
name: string
age: number
constructor() {
this.name = '123'
this.age = 12
}
}
// 接口继承接口
interface Counter {
(start: number): string //代一个string参数,返回值未string的函数
interval: number
reset (): void
} function getCounter(): Counter {
let counter = <Counter>function(x: number){}
counter.interval = 123
counter.reset= function():void {
}
return counter
}
let cc = getCounter()
console.log(cc.interval) //接口继承类
class pc {
private state: any
}
interface sel extends pc {
select (): void
}
// 接口不能继承代有私有类型类
class pd implements sel {
constructor () {
}
select ():void { }
}

  对于接口而言,不能出现私有的属性或者方法,因为接口的属性在其继承者上,必须实现。二私有的属性和对象是不能够继承的。

 

TS学习的更多相关文章

  1. TS学习随笔(七)->声明文件

    now我们来看一看TS怎么声明文件, 在JS里面我们经常会使用各种第三方类库,引入方式也不太相同,常见的就是在HTML中通过script标签引入,然后就可以使用全局变量$或者jQuery了 我们通常这 ...

  2. TS学习随笔(三)->接口

    终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...

  3. TS学习随笔(四)->数组的类型

    少侠们,今天我们继续来搞一搞TS 今天我们要来看一看TS中数组的定义是个什么鬼样子 数组的类型: 在 TypeScript 中,数组类型有多种定义方式,比较灵活.下面我们来看看有哪些定义方法 「类型 ...

  4. TS学习随笔(一)->安装和基本数据类型

    去年学过一段时间的TS,但由于在工作中不常用.就生疏了,最近项目要求用TS,那我就再回去搞搞TS,写一篇记录一下自己学习TS的进度以及TS知识点 首先,关于TS的定义我就不在这描述了,想看百度一下你就 ...

  5. TS学习随笔(六)->断言

    now,我们来看一看TS里面的断言,听起来很上档次啊,其实看完你就发出惊叹,这就是断言啊 类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型 语法 <类型>值 ...

  6. TS学习随笔(五)->函数

    这篇文章我们来看一下TS里面的函数 函数声明 在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expre ...

  7. TS学习随笔(二)->类型推论,联合类型

    这篇内容指南:        -----类型推论  -----联合类型 类型推论 第一篇中我们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那我们可不可以不加呢,这个嘛 ...

  8. TS学习之for..of

    for..of会遍历可迭代的对象,调用对象上的Symbol.iterator方法(可迭代对象,数组,字符串等) let arr = ["hello", "ts" ...

  9. TS学习之泛型

    可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据 不适用泛型的函数 function myfn(args: number): number { return args; } functi ...

随机推荐

  1. 通过tar包解压安装docker

    以下步骤在centos7和debian10中验证通过 1.通过官网下载安装包 wget https://download.docker.com/linux/static/stable/x86_64/d ...

  2. virtualbox安装xp虚拟机缺少驱动

    下载驱动精灵完全版,自带万能驱动

  3. Linux-ubuntu命令-文件、磁盘管理

    .文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目录名称最长可以有26 ...

  4. MySQL备份工具之mysqlhotcopy

    mysqlhotcopy使用lock tables.flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和运行 ...

  5. The window object

    At the core of the BOM is the window object, which represents an instance of the browser. The window ...

  6. bootstrap datetimepicker、bootstrap datepicker日期组件对范围的简单封装

    1.bootstrap datepicker 使用 <div class="row form-group"> <label class="control ...

  7. 【HTML】---HTML语义化

    1.什么是HTML语义化? <基本上都是围绕着几个主要的标签,像标题(H1~H6).列表(li).强调(strong em)等等> 根据内容的结构化(内容语义化),选择合适的标签(代码语义 ...

  8. springmvc请求参数获取(自动绑定)的几种方法

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

  9. Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析

    1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...

  10. 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

    [神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...