typescript 第二部分
ts 中不允许变量同名
函数定义的两种方式
第一种:命名函数 = 声明式定义
function fn(){}
第二种:匿名函数
var fn = function(){}
function fn(x:string,y:string):string{ // x:string 这里指 变量x 的数据类型 y:string 这里是 变量y 的数据类型 ():string 这里指 函数return 的数据类型
return " hello world "
}
var fn=function(x:string,y:string):string{ // 与上面的解释一致
return "hello world"
}
约束函数
var sf:(x:string,y:string)=>string=function(a:string,b:string):string{
return "hello"
}
可选参数 :使用 ?来实现可选参数的功能,可选参数一定要放后面
function fn(x:string,y?:string):string{
return "hello"
}
fn("hello","world") fn("hello") // 这两种写法都不会报错
默认参数:使用 = 给参数赋值
function fn(x:string,y:string="hello"):string{
return y;
}
fn("world") // = 给参数一个默认值
... 运算符:如果不确定传参的个数,我们可以用 ... 运算符来表示,且还会将元素转化成数组
function fn(...res):number{
console.log(res)
}
fn(12,24,36,48,60,72,84,96);
函数重载
在 js 里面不存在函数重载,但是有函数重写
函数重载的定义:函数名相同,跟据参数类型决定,使用哪个函数
函数重写:在 js 中,因为一旦函数名相同,后者会将前者覆盖
function fn(x){} // 像这里,我们没有指定数据类型,他会默认数据类型为 any (任何类型),但是 一般情况下 还是要加的
ts重载 案例:
定义两个函数的数据类型,没有实现他的功能
function fn(x:number):number;
function fn(x:string):string;
function fn(x):any{
return x
}
fn(12) / fn("hello") // 这个案例是一个简单的写法 主要是看实参传递什么样的格式,以便正常的返回什么样的数据类型
ts 函数重载:定义一个函数的数据类型,函数会进行重载
原生 js 伪实现一个重载的案例:
function fn(x){
if(typeof x == "string"){
console.log("string")
}
else if (typeof x == "number"){
console.log("number")
}
}
fn(12)
类
案例:
class Person{
name:string; // 定义属性
age:number;
constructor(name:string,age:number){ // 实例
this.name=name;
this.age=age;
}
run(){
console.log("hello world") // 这个是定义方法
}
}
var person = new Person("zhang",20);
定义类的注意事项
1. ts 定义类,首先如果有属性,一定要定义属性,指定数据类型,不加修饰符,默认是 public
2. ts 中,类没有原型概念
3. new 实例的时候,就是调用构造函数
4. 方法中的 this 指向实例对象
类的继承:关键字 extends super
案例:
class Animal{
name:string;
age:number;
constructor(name:string,age:number){
this.name=name;
this.age=age;
}
move(){
console.log(this.name);
}
}
class Dog extends Animal{
constructor(name:string,age:number){
super(name,age)
}
}
var shinubi = new Dog("史努比",7);
shinubi.move()
多态:对父类的方法重写,并且子类之间,这个方法 表现/功能 不一样,这就叫多态,都是为了 继承 用的
多态的另一种解释:父类定义一个方法,没有去实现,由子类去实现,并且表现不一样,就也叫多态
多态的目的:都是继承用的
案例:
class Person{
move(){}
}
class dog extends Person{
move(){}
}
class cat extends Person{
move(){}
}
这个是一个简单的多态的案例,就只是函数名一样,但功能及用法,完全不同
类中的修饰符:一种访问权限
public 公共的 当没有在属性和方法前面加修饰符,默认 public ,在任何地方都可以访问(类内,子类,类外)
protected 受保护的 子类,类内 可以访问,类外面不能访问
private 只有 类内 可以访问,子类及类外 不可以访问
static 静态属性,类上面的属性;
访问静态的属性 类 . 属性名
案例:
class Father{
name:string;
protected money:number;
private company:string="上市公司";
constructor(name:string,money:number){
this.name=name;
this.money=money;
console.log(this.company);
}
static query(){
console.log("我特别安静");
}
}
class Son extends Father{
constructor(name:string,money:number){
super(name,money);
}
}
var son = new Son("zhang",10);
console.dir(son);
console.dir(Father);
抽象类 abstract
1. 作为其他子类的基类使用
2. 抽象类不能被实例化
3. 使用 abstract 关键字,来定义抽象类和抽象方法
4. 抽象类中的抽象方法,不包含实现,在他的派生类(子类)实现
5. 派生类中的必须实现抽象类的抽象方法,普通方法可以不用重写,子类继承抽象类和类的继承用法一致,唯一区别就是抽象方法必须写
6. 实现抽象类的子类使用关键字 extends
对于抽象类的理解
抽象类:就是给子类指定一些约束条件,实现抽象类,子类的时候,必须包含抽象类的所有属性
案例:
abstract class Ed{
abstract name:string;
abstract move():any;
}
class Fd extends Ed{
name:string;
move(){
console.log("我们被迫的");
}
}
var sd = new Fd;
sd.move();
接口:interface
接口和抽象类都是对事物的一种约束,抽象类只能约束类,接口可以约束条件,很多接口就是指定的一种规范,就是要按照这个规则来
使用关键字 interface 来指定规范
1. 指定属性的接口
interface obj{ // obj 这个类上 规定了 name 属性 必须是字符串 age 属性 必须是 数字 ,且必须有 name 和 age 属性
name:string;
age:number
}
var fs:obj={name:"zhang",age:10};
console.log(fs) // 我们的 fs 就使用了obj 的规范
function fn(x:obj):void{ // 我们的函数使用这种规范
console.log(x)
}
fn({name:"lisi",age:20});
2. 实现函数类型的接口
interface fn{ // 规定函数规范
(x:string,y:string):string
}
var f:fn=function(a:string,b:string){ // f 使用这 fn 规范
return a+b
}
3. 可索引类型(数组 ,对象)
1. 数组
interface arrs{
[index:number]:string
}
var arr:arrs = ["zhang","lisi"];
console.log(arr);
2. 对象
interface objs{
[index:string]:string
}
var obj:objs = {name:"zhang",age:"12"};
4. 定义类的类型接口
1. 里面的方法不能实现
2. 使用关键字 implements 实现这个接口类
3. 在类中实现接口的办法
interface Animal{
name:string;
eat():void;
}
class Dog implements Animal{
name:string;
eat(){
console.log("我是被迫的")
}
}
var dog = new Dog;
dog.eat()
5. 接口继承
接口继承的方式 extends 的关键字
interface A{
color:string
}
interface B extends A{
name:string
}
var afg:b={ // 在这里知道,我们必须有 color 属性,还要由 name 属性才可以,
color:"red",
name:"zhang"
}
console.log(afg);
typescript 第二部分的更多相关文章
- create-react-app入门教程
Create React App是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具.它本身集成了Webpack,并配置了一系列内置的loader和默认的npm的脚本,可 ...
- 总结vscode调试vue,nodejs的各种方法
之前写项目一直都是console.log()来调试的,浪费了很多时间,现在整理一下用vscode对nuxt(vue)前后端进行调试的方法 前端的调试 chrome+launch 使用chrome调试, ...
- 使用Typescript重构axios(十九)——请求取消功能:实现第二种使用方式
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- TypeScript学习指南第二章--接口(Interface)
接口(Interface) TypeScript的核心机制之一在于它的类型检查系统(type-checker)只关注一个变量的"模型(shape)" 稍后我们去了解这个所谓的形状是 ...
- 第二章 TypeScript 开发环境搭建
Mac OS X 下 TypeScript 开发环境搭建 一.集成开发环境 WebStrom VSCode 二.安装 TypeScript Homebrew(macOS 缺失的软件包管理器) ruby ...
- TypeScript学习第二天:认识ts的数据类型
目录 1,类型总览 2,基本类型 2.1,布尔 2.2,数字 2.3,字符串 2.4,Null 2.5,undefined 2.6,symbol 2.7,bigint 3,引用类型 3.1,数组 Ar ...
- 转职成为TypeScript程序员的参考手册
写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- TypeScript 素描-变量声明
博文读自 TypeScript 官方文档而来,不具有学习性,仅是本人学习时记录以供日后翻阅 ,有学习TypeScript的朋友还请去看更为详细的官方文档 /* 变量声明在之前的js中一直是使用var关 ...
随机推荐
- scala新版本学习(3)
1.REPL:读取->求值->打印->循环.Scala程序将输入的内容快速的编译成为字节码,然后字节码文件交给Java虚拟机进行执行. 2.val是值不可变,var值可变.在变量声明 ...
- flume复习(二)
一.简介:flume是一种分布式.可靠且可用的系统,能够用于有效的从不同的源收集.聚合和移动大量的日志数据到集中式数据存储.它具有基于流数据的简单灵活的架构,它具有健壮的可靠性机制和许多故障转移和恢复 ...
- 多Y轴示例
//多Y轴示例 <template> <div id="main" :style="{width:'1000px',height:'500px' }&q ...
- 第四篇 HTML 表单深入了解、注释和a标签的运用
表单深入了解.注释和a标签的运用 注释,HTML中的注释格式: 开头 <!-- 结束 --> 例子: <!-- <div>我被注释了</div> - ...
- Spring 资源加载
pom.xml ``` org.springframework spring-core 4.3.14.RELEASE org.springframework spring-beans 4.3.16.R ...
- python学习-输入输出
Python的输入和输出非常方便,下面详细记录一下 任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果.输入是Input, ...
- linux主机之间的SSH链接
一.什么是SSH连接 SSH为Secyre Shell的缩写,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.且SSH连接可以通过多种平台 ...
- Python中的字典和集合
一.字典(dict) 1. 概述 字典是Python唯一的映射类型. 只能使用不可变的对象(比如字符串)来作为字典的键,但是可以把不可变或可变的对象作为字典的值. 键值对在 ...
- Codeforces 708D 上下界费用流
给你一个网络流的图 图中可能会有流量不平衡和流量>容量的情况存在 每调整一单位的流量/容量 需要一个单位的花费 问最少需要多少花费使得原图调整为正确(可行)的网络流 设当前边信息为(u,v,f, ...
- 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集
<编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...