TS类型声明的那些那些

现在很多项目都是ts编写的,不类型声明就会一大堆报错。

interface、和type都可以用来声明类型

interface是接口,type是类型别名。

declare可以用来让他们被ts编译器识别成为全局变量,在各个不同的组件中使用就可以不手动引用了。

类型声明的具体种类

// 修饰功能符
readonly和?分别代表只读,和可选属性
readonly a:string
a?:string

//基本类型
string number null undefined symbol boolean object


//对象类型
Date RegExp..

any //任何值

never // 任何值都不是

[string,number]//元组,es6新类型,声明数组长度为2,第一个值为string...

// 数组声明
1.Array<T>类型
var A:Array<string> = ["hello"]
2.T[]类型
var A:string[] = ["hello"]

//泛型
//记得把T用<T>传进去,T根据输入动态确定
type A<T>{
    name:T
}
var B : A<string> = {name:"hello"}

interface

// 1.继承与对象声明
declare interface Animal{
    name:string
    color:string
    sound:string
    ears:number
}

declare interface Fish extends Animal{
    gillShape:string //鱼鳃形状
}

declare interface Duck extends Animal{
    featherColor:string //羽毛形状
}
// 2.函数声明
declare interface A{
    (x:number,y:number):void
}
// 
// 3.重复声明
declare interface A{
}
declare interface A{
}
A和A会合并声明,后来的覆盖前面重复的部分属性

type

// 1.声明和继承
declare type Animal{
    name:string
    color:string
    sound:string
    ears:number
}

declare type Type1{
    gillShape:string //鱼鳃形状
}

declare type Type2{
    featherColor:string //羽毛形状
}
declare type Fish = Animal&Type1 //交叉类型
declare type Duck = Animal&Type2

// 2.基本类型
declare type A = string
// 3.联合类型
declare type C = A | B // 类型是A|B中的一种
// 4.交叉类型
declare type C = A & B //类型是A和B都要实现
// 5.函数类型
declare type C = (x:number,y:number)=>void
// 6.元组类型
declare type C = [A,B] // 声明一个数组,长度指定为2,第一位必须是A,第二位必须是B

泛型

// 写不动declare了...想把之前的declare全删了...emmm
// 加入你不知道T是什么,T可以随你写什么名字替换,这样子如果n需要多种不同的类型,就不用一个类型重写一个C了。
type C<T>{
    n:T
    phone:T[]
}
// 使用,手动输入值
var A :C<string> = {n:"today",phone:"+1008611"}
// 自动推断值,x由用户输入
var A:C<T> = {n:x,phone:"..."}

类型断言

// 可以用力将联合类型定义为更具体的类型 type A = number|string;var D :A = 1;E = (D as number)+2
// 尖括号语法
var A =  (<string>B).C
// as
var A = (B as string).C
// 非空断言!
var A = B!.C // 有时候浏览器会报错B有可能为空,空不空我还不知道吗!!,勇敢地用感叹号告诉它一定值吧!!

枚举

//ts新类型,枚举enum
//1.数字枚举
enum Name
{
    A=0,
    B=1
}

or
enum Name{
    A,
    B    
}
如果不指定数字,会默认以0开始赋值

//使用
enum.A //0
enum.B //1
enum[0] //A,值的反向映射
type C{
    name:Name.A
}

//2.字符枚举,不赋值hello会报错
enum Name
{
    A="hello",
    B="world"
}

//3.异构枚举
enum Name{
    A=1,
    B="hello"
}

//遍历枚举
for (let i in Name){
    console.log(Name[i]) //1,hello
}

// @ts-nocheck可以让ts不检查该文件

如需转载,请声明来处

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹邹邹邹!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值