js的类型:
7种基本类型:boolean,number ,string ,null,undefined,symbol(es6),bigint(es10) 2020.
引用类型obj:arry,function,date
ts新增类型:
tuple 元祖
nver
any
void
其他高级类型
:+类型名字 类型注解
重新定义类型会报错
类型不同不能相互赋值
null只能赋值给null,undefined只能赋值给undefined null不等于undefined;
Symbole()独一无二的变量 命名冲突,私有属性 拿它解决
BigInt(322223112333); number类型有精度限制,这个就是为了解决这个问题。大数不会失真
Tsconfig target: ESNext module:ESNext
数组 :string[] : Array<number|string> 联合类型
元组 是特殊的数组 tuple:[string,number,boolean]=['a',1,false];
tuple.push('abc')
tuple[2] 能加不能读,不能够越界,必须要是要一一对应
函数
fun1:(params:string)=>boolean=()=>false
function fun2(params:string):boolean{return false}
type Fun=(params:string)=>boolean; 类型定义可复用
const fun1:Fun=()=>false;
const fun3:Fun=()=>true;
对象
const obj:object={a:1,b:2,}工作中不这样定义 ,因为object比较泛,有点类似any了,类型越具体越好
const obj1:{a:string,b:string}={a:'1',b:'2'}
interface Obj {a:string,b:string}
const obj1:Obj={a:'1',b:'2'}
void 没有任何返回值
const v=():void=>{}
any;如果都是any就和javascript没有区别了
没有加类型注解没有加:默认就是any的 可以随便的赋值 尽量别使用any,使用any就放弃了类型的好处
let x;
x=1;
never 永远不会有返回值 在业务代码中很少用never 高级类型编程的时候会用到
const n1=():never=>{throw new Error()}
const n2=():never=>{while(true){}} 死循环卡这儿了
tuple
push可以突破限制,但是读取不到
const arr: [number,string] = [1,'test'];
arr.push(66);
arr[2]; // 语法错误
函数类型:箭头函数(推荐)+ 函数语句
类型别名
type Func = (p:string) => boolean;
const func1: Func = ('test') => true;
function func2(p:string):boolean{
return true
}
any: 任何类型,放弃类型检查
never:永远没有返回值
const f1 = () :never => {
throw new Error() // 终止进程
// 或者
while(true){
// 无限循环
}
}
js和ts类型
// 数组 const arr1:string[] = ['a','b','c']; const arr2:Array<number | string> = ['a',3,5]; // 元祖--严格按照顺序,一一对应 const tuple: [string,number] = ['a',3] // 函数 // 1.箭头函数 type Fun = (params:string)=>boolean; const fun1:Fun = ()=>false; // 2.函数语句 function fun2(params:string):boolean{ return false; } // 没有返回值--void const v=():void =>{} // 对象 interface Obj {a:string,b:string} const obj:Obj = { a:'1', b:'2' }
定义数组、函数
TS 变量声明格式:变量名 + 类型注解。
当变量赋值与声明类型不一致的时候,TS 会提醒类型校验不一致。
const aNum: number = 123; // 数字类型 const aStr: string = 'Hello ts'; // 字符串类型 const aBool: bool = true; // 布尔类型 const aNull:null = null; // null 类型,值只能是null const aUndefined: undefined = undefined; // undefined 类型,值只能是undefined const aSymbol: symbol = Symbol(); // symbol 类型,表示独一无二,每次声明的数据都是不同的 const bSymbol: symbol = Symbol(); // 用作私有属性、解决命名冲突问题 console.log(aSymbol === bSymbol); // 输出 false console.log(Number.MAX_VALUE); // JS 支持的最大数值:Number.MAX_VALUE const aBigint:bigint = 123456789123456789n; // 处理比JS支持最大的数还大的数值 const bBigint: bigint = Bigint(123456789123456789); // 两种定义Bigint 变量的方法 const sArr: string[] = ['a', 'b', 'c']; // 字符串数组 const nArr: number[] = [1, 2, 3]; // 数字数组 const bsArr: Array<string> = ['a', 'b', 'c']; // 包装类型 const bnArr: Array<number> = [1, 2, 3]; // 包装类型 const lhArr: Array<number | string> = [1, 2, 3, '4']; // 联合类型 const aTuple: [string, number] = ['a', 1]; // tuple 元组类型,是特殊的数组,显式的定义数组每一项元素类型和元素数量上限,并且一一对应。 aTuple.push(8); // 元组可以添加元素,但是不能读 aTuple[2]; // 会提醒 Tuple type '[string, number]' of length '2' has no element at index '2' const bTuple: [string, number, number] = ['abc', 1, 8]; // tuple 元组新增元素,要一一对应 // 函数定义,一般两种类型:箭头函数、function // 一、箭头函数 const aFun = () => false; // 函数类型定义 const aFun: () => boolean = () => false; // `() => boolean` 就是定义的函数类型 // 如果有参数 const aFun: (params: string) => boolean = () => false; // `(params: string) => boolean` 就是定义的函数类型 // 二、普通function 函数 function bFun() { return true; } // 函数类型定义 function bFun(params: string): boolean { return true; } // 推荐使用箭头函数,方便提取函数类型定义 type Fun = (params: string) => boolean; const cFun: Fun = () => false; const dFun: Fun = () => false; type Fun = (params: string) => void; // 如果函数没有返回值 // 对象,这样定义比较宽泛 const aObj: object = { a: 1, b: 2 } // 对象,类型定义越具体越好,工作中一般如下定义 const bObj: { a: string, b: string } = { a: 'hello', b: 'world' } // 对象定义类型也可以提取,用interface interface Obj { a: string, b: string } const cObj: Obj = { a: 'hi', b: 'typescript' } // void 类型,没有任何返回值 // 注意以下返回值为空的函数类型定义方式 const aVoid = (): void => {}; const bVoid: () => void = () => {} type Fun = (params: string) => void; const cVoid: Fun = () => {} // any 就相当于没有类型定义,和js 一样了,可以随便赋值。 // never 永远没有返回值,一般高级编程会用,日常很少 const aNever = (): never => { throw new Error() } const bNever = (): never => { while(true) {} }