1.typescript类型
let num1:number = 213;
let str1:string = '222';
let bool1:boolean = true;
let arr:string[] = ['dwadw'];
let arr1:Array<string> = ['dwadw'];
let arr2:(number | string)[] = ['dwadwad',21231];
let arr3:any[] = ['wdawda',2123,232,undefined,null];
let arr100:[string,number,boolean] = ['dwadw',21231,true];
enum Gender{
Male,
Femal
}
enum MyGender{
Male = 1,
Femal
}
enum MyGender1{
Male,
Femal = 0
}
console.log(MyGender1);
console.log(MyGender.Male,'male');
console.log(MyGender.Femal);
let sex:Gender = Gender.Male;
console.log(sex);
enum sexList{
man,
woman
}
let sex1:sexList = sexList.man;
let sex2:sexList = sexList.woman;
console.log(sex1);
console.log(sex2);
let sex3:sexList;
sex3 = sexList.woman;
sex3 = 5;
2.any与void null与undefined
let any1:any;
any1 = 'dwad';
any1 = 2123;
any1 = ['dwadw',2132,21321];
function test1():void{
console.log('2222');
return undefined;
}
test1();
let value:void;
value = undefined;
3.never类型
function demo():never{
throw new Error('baocuole');
}
demo();
function demo2():never{
while(true){
console.log('222');
}
}
demo2();
4.object类型
let obj1:object;
obj1 = 1;
obj1 = '222';
obj1 = true;
obj1 = {
name:'2',
age:222
}
5.类型断言
let str:any = 'laotianwy';
console.log(str.length);
console.log((<string>str).length);
console.log((str as string).length);
6.ts变量的声明和结构赋值
7.接口
interface fullname{
firstname:string
lastname:string
}
let obj = {
firstname:'111',
lastname:'222',
fullname:'333'
}
function say({firstname,lastname}:fullname):void{
console.log('我的名字是'+firstname+'_'+lastname);
}
say({firstname:'111',lastname:'222'});
say({firstname:'111',lastname:'222',fullname:'333'});
say(obj);
8.接口参数多了或者少了怎么办
interface FullNmaeList {
firstname:string
lastname:string
middlename?:string
}
function say({firstname,lastname,middlename}:FullNmaeList):void{
if(middlename){
console.log(`我的名字是三个字${firstname}_${lastname}:${middlename}`)
}else{
console.log(`我的名字是两个${firstname}${lastname}`)
}
}
say({firstname:'111',lastname:'222',middlename:'3333'});
let obj = {firstname:'111',lastname:'222'};
say({firstname:'111',lastname:'222'});
say(obj);
interface FullMoreInterface{
firstname:string
middlename:string
lastname:string
}
function say1({firstname,middlename,lastname}:FullMoreInterface):void{
console.log(`my_name_is_${firstname}_${middlename}_${lastname}`);
}
say1({firstname:'111',middlename:'222',lastname:'333',aaa:'444'} as FullMoreInterface);
let obj1 = {firstname:'111',middlename:'222',lastname:'333',aaa:'444'};
say1(obj1);
interface FullMoreInterface1{
firstname:string
middlename:string
lastname:string
[propsname:string]:any
}
function say2({firstname,middlename,lastname}:FullMoreInterface1):void{
console.log(`my_name_is_${firstname}_${middlename}_${lastname}`);
}
say2({firstname:'111',middlename:'222',lastname:'333',aaa:'444'});
9.索引签名
interface Fullname{
[propsname:string]:string
}
let obj1:Fullname = {
firstname:'laotian',
lastname:'tian',
age:'22',
false:'666'
}
interface ArrayNumber{
[propsname:number]:string
}
let obj2:ArrayNumber = {0:'a',1:'b',2:'c'};
let arr1:ArrayNumber = ['dwad','dw','dwadw'];
console.log(obj2[0]);
console.log(arr1[0]);
10.只读属性和只读数组
interface Fullname1{
firstname:string
readonly lastname:string
}
let myname:Fullname1 = {
firstname:'laotian',
lastname:'ixao'
}
let myname1:Fullname1;
myname1 = {
firstname:'xiaotian',
lastname:'dwadw'
}
let arr:string[] = ['a','b','c'];
let arr1:ReadonlyArray<string> = ['dwad','dwa','dwad','d'];
arr1[0] = 'dwadw';
arr[0] = 'dadwad';
console.log(arr1[0]);
console.log(arr[0]);
11.函数接口与混合类型接口
interface FuncInterface{
(a:number,b:number):number
}
let fun1:FuncInterface = function(a:number,b:number):number{
return a+b;
}
let res = fun1(11,22);
let count = 0;
function demo(){
count++;
console.log(count);
}
demo();
demo();
demo();
let demo1 = (() => {
let count = 0;
return () => {
count++;
console.log(count);
}
})();
demo1();
demo1();
demo1();
interface ObjAndFunc{
():void
count:number
}
let getCount = (function():ObjAndFunc{
let fn = <ObjAndFunc>function(){
fn.count++;
console.log(fn.count);
};
fn.count = 0;
return fn;
})();
getCount();
getCount();
getCount();
getCount();
12接口的继承
interface LengthFace{
length:number
}
interface WidthFace{
width:number
}
interface HeightFace{
height:number
}
interface CalcFace extends LengthFace,WidthFace,HeightFace{
color:string
}
let rect:CalcFace = {
length:10,
width:22,
height:100,
color:'#fff'
}
13ts中的函数
function add(){}
let add1 = function(){}
let add2 = () => {}
function test(name:string):void{
console.log(name);
}
let test1 = function(name:string):void{
console.log(name);
}
let test2 = (name:string):void{
console.log(name);
}
14ts函数的完整格式
let add:(a:number,b:number) => number;
add = function(a:number,b:number):number{
return a+b;
}
let res = add(10,20);
console.log(res);
let add1:(a:number,b:number) => number = function(a:number,b:number):number{
return a+b;
}
console.log(add1(10,50));
let add2:(x:number,y:number) => number = function(x,y){
return x+y;
}
let add3:(x:number,y:number) => number = (a,b) => {
return a+b;
}
15.type声明函数类型
// type声明函数类型
type addFunc = (a:number,b:number) => number;
// 完整写法
let add0:addFunc = function(a:number,b:number):number{
return a+b;
}
// 简便写法
let add:addFunc = function(a,b){
return a+b;
}
16.函数的重载
// 函数的重载:就是同名的函数根据不同的参数实现不同的功能,函数的重载只能定义,不可在定义的时候实现
/* 当前报错
function GetArr(x:number):number[]{
let arr = [];
for(let i=0;i<x;i++){
arr.push(i);
}
return arr;
}
function GetArr(s:string):string[]{
return s.split('');
}*/
function GetArr(x:number):number[];
function GetArr(s:string):string[];
function GetArr(a:any):any[]{
if(typeof a === 'string'){
return a.split('');
}else{
let arr = [];
for(let i=0;i<a;i++){
arr.push(i);
}
return arr;
}
};
console.log(GetArr('2222')) // [ '2', '2', '2', '2' ]
console.log(GetArr(9)); // [0, 1, 2, 3, 4,5, 6, 7, 8]
17.函数的可选参数与函数的扩展运算符
function add(x:number,y:number,z?:number):number{
return x+y+(z ? z:0);
}
console.log(add(2,1));
console.log(add(2,2,2));
function add1(x:number,y:number):number;
function add1(x:number,y:number,z:number):number;
function add1(x:number,y:number,z?:number){
return x+y+(z ? z:0);
}
console.log(add1(10,20,30),'add1');
function props(x:number,y?:number,z?:number){
return x+(y ? y:0)+(z ? z:0);
}
console.log(props(1));
function propstaion(x:number,...arg:number[]){
console.log(x,'x');
console.log(arg,'arg');
}
console.log(propstaion(2,123,21,3,21,3,21,32,1,3,21,32));
18泛型
let getArr = (value:number,items:number = 9):number[] => {
return new Array(items).fill(value);
}
let getArr1 = (value:any,items:number = 10):any[] => {
return new Array(items).fill(value);
}
console.log(getArr1(10,4).map(item => item.length));
let getArr2 = <T>(value:T,items:number = 5):T[] => {
return new Array(items).fill(value);
}
console.log(getArr2('2222222'));
console.log(getArr2(1111111));
console.log(getArr2('2222222').map(itme => itme.length));
console.log(getArr2(1111111).map(item => item.toFixed(2)));
19泛型约束
interface LengthPropsFace{
length:number
}
let getArray = <T extends LengthPropsFace>(value:T,items:number = 5):T[]=> {
return new Array(items).fill(value);
}
let arr = getArray<string>('abc');
20.泛型约束中使用类型参数
let getProps = <t,k extends keyof t>(obj:t,keys:k):any => {
return obj[keys];
}
let obj = {
a:'a',
b:'b',
c:'c'
}
getProps(obj,'a');