安装
全局安装
npm install -g typescript
查看版本号:
tsc -V
typescript基础类型
具体的类型代码和测试如下:
//布尔值----1
let b:boolean=false;
console.log("布尔值::",b);//false
//数字类型有四种表达方式,2进制 8进制 10 进制 16进制 以20为列----2
let erJinZhi=0b10100;
console.log("二进制::",erJinZhi);//20
//八进制,8的2倍加上4
let baJinZhi=0O24;
console.log("八进制::",baJinZhi);//20
//十进制 10的2倍加上0
let shiJinZhi=20;
console.log("十进制::",shiJinZhi);//20
//十六进制 16加上4
let shiLiuJinZhi=0X14;
console.log("十六进制::",shiJinZhi);//20
//字符串----3
let s:string="hahah";
console.log(s);
//数组,数组有两种表示方法----4
let arr:number[]=[1,2,3,4];
let arr2:Array<number>=[5,6,7,8];
console.log(arr);
console.log(arr2);
//元组, 元组就是在 固定长度,固定类型-----5
let yuanZu:[string,number];
yuanZu=["ni",1];
console.log(yuanZu);
//枚举类型,枚举类型默认是有下标的-----6
enum Color{
red,
green=2,//枚举类型的下表是可以进行修改的
blue
}
let a:string=Color[0];
console.log(a);
console.log(Color.blue);//可以直接输出输出的是下标
//any类型 可以允许是任何类型--------7
let aa:any="sssss";
console.log(aa);//sssss
//void类型 就是空类型 只允许赋值 undefined类型和null类型-----8
let v:void=undefined;//可以的
let v1:void=null;//可以的,除了这两个其他都会报错,所以毫无意义
//undefined和null 是所有类型的子类型-------9
let n:number=5;
n=null;//子类型可以赋值给父类型
n=undefined;//子类型可以赋值给父类型
let n1:number=null; //null是自雷所以是可以的
//never类型 表示不存在的类型,一般用于函数 返回值-----10
function fn():never{//抛出异常信息
throw new Error("something fail ");
}
function fn1():never{//永远都在循环
while(true){}
}
强制类型转换
any类型强制类型转换成其他的类型:
//any类型强制转换成 其他类型
let ss1:any=11111111;
let ss0:string=(<string>ss1);//第一种方式
let ss2:string=(ss1 as string);//第二种方式
接口
接口的定义方式:
//接口的定义方式
interface Person{//接口是可以作为一个类型的
name:string;
}
function fn(arg:Person){//接口可以作为类型
console.log(arg);
}
fn({name:"张三"});//则必须是与接口对应起来的才可以
接口的可选属性
就是这个属性可以填写,也可以不填写。
//接口的可选属性
interface A{
name?:string;
age?:number;
}
function person (arg:A){
}
//虽然规定了类型是A接口,但是里边的属性是可选属性,可以填写也可以不填写
person({name:"张安"});
只读属性
只读属性:readonly
只读数组的属性
只读数组的报错:
所以报错是因为只能读不能修改,所以报错。
接口函数类型
则接口函数类型的变量的值必须是一个函数。
正确的函数接口类型代码如下:
//函数接口类型
interface FunType{
(n:number,s:string):boolean //且函数的参数必须是固定的类型,返回值也是
}
let fn:FunType;
// fn=5;//报错,必须是一个函数
fn=function(nu:number,ss:string):boolean{
return nu>-1;
}
可索引属性
这个是最简单的可索引属性:
//可索引属性
interface Person{
[index:number]:string
}
let person:Person=["张三","李四","王五"];//那么就只能够按照这个模式来写数组,索引和返回值的类型固定了
console.log(person[0]);
索引签名还支持字符串签名。其实签名方式就只有两种,一个是number,一个是string。
可以单独使用字符串签名吗?
可以的。
如下代码:
//可以单独使用字符串签名吗
interface Person{
[x:string]:string
}
let person:Person={"name":"张三","name2":"李四"};
console.log(person.name);
字符串和数字共同签名:
数字类型的返回值,必须是字符串类型返回值的子类型。
数字类型返回子类型。字符串类型返回父类型。
原因是:数字类型其实也是以字符串的签名返回的,既然两个都是字符串的方式返回,那么返回的类型也应该保持一致,所以一个返回父,一个返回孩子。数字返回的是孩子,字符串返回的是父亲。
只读数字索引
好处是这个索引以后是不能够进行赋值更改的,起到了保护的作用。
如下代码:
//只读数字索引
interface readOnlyArrayIndex{
readonly [index:number]:string;
}
实例接口和接口实现
ts中接口的实现有两种,一种是constructor实现,一种是实例new的实现。
如下说明,下边很多的代码,可以看看:
/**
* 接口 实例接口 类 内容比较多
*
*/
//第一个:普通接口
interface Person{
name:string;
//有跑的方法
run();
}
//类可以实现普通接口,就要实现里边的方法和属性
class Man implements Person{
//实现父接口的name属性
name:string;
//自定义自己的属性
tall:number;
run(){
console.log("run...");
}
//构造函数才可以构造出对象
constructor(name:string,tall:number){
this.name=name;
this.tall=tall;
}
//具体自己的方法eat
eat(){
console.log("eat...");
}
}
//使用这个实例,子类可以赋值给比自己大的类的变量的,但是只具备更大类的特性
let person:Person=new Man("王五",190);
console.log(person.name);//王五
person.run();//run...
//第二个:实例接口,是用来创建实例的。它的实例返回值就是它能接收的类。这样可以实例这个接收的类。
interface WoMan{
//new 的时候参数和返回值
new(name:string):Person;
}
function create(woman:WoMan,name:string):Person{
return new woman(name);
}
class Boy implements Person{
name:string;
run(){};
}
let boy:Person=create(Boy,"李四");
console.log(boy.name);
接口的继承
接口是可以被多个接口继承的。
例如:
iterface1 extends interface2,interface3...
混合类型
混合类型就是在接口里边定义各种类型的规则。
//混合类型
interface MixinType{
//必须是一个函数,且返回值是string
(start:number):string;
//有属性i
i:number;
//有一个方法,方法的返回值是空
reset():void;
}
//把一个函数强制转换成混合类型,然后按照混合类型的特性添加相应的值。
let m:MixinType=(function(s:number){
}) as MixinType;
m.reset=function(){}
m.i=100;
console.log(m);
接口继承类
接口是可以继承类的。
//接口继承类
class Person{
state:number;
}
interface Man extends Person{
select();
}
//因为接口Man继承了,Person,所以也会继承Person的属性stat。后续实现接口的类也要是实现这个属性
class Boy implements Man{
state=100;//必须实现,否则报错
select(){//必须实现
console.log("select of function...");
}
}
类访问修饰符
private只能在类里边进行访问
protected子类可以用父类的内容
存取器
其实就是java里边的get方法和set方法。
type类型
是定义某个某个类型或者是某个值只能是哪些。
type t="a"|"b"...
t只能是 a 或者 b等。也可以是类型。 t=number|string... 只能属于某一些类型。