TypeScript整理笔记

本文深入讲解TypeScript的数据类型,包括基础类型、特殊类型及自定义类型。探讨类型校验、函数参数与返回值类型,介绍接口、类型断言与类等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提准备:

npm install -g typescript:全局安装TypeScript。

tsc -v:查看typescript的版本。

tsc test.ts:运行test.ts文件并编译成test.js文件。

tsc test.ts --outFile ./dist/cc.js :将test.ts编译到当前dist文件下的cc.js中(自动创建文件/文件夹)。

vscode下运行typescript参考:https://blog.csdn.net/gofun4/article/details/80293222

(一)Typescript类型校验。

1、TypeScript数据类型:包括基础类型(Boolean,String,Number,Null,Undefined)和特殊类型(Array,Any,Never,Void,Enum,Tuple)以及自定义类型。

(1)Boolean 布尔类型:true/false。

var bool: boolean = false;

//注意:当var bool=false; bool=12时在typescript中会报错,因为ts中如果变量声明时没有说明类型,
//会根据第一次赋值的类型,设定该变量的类型,后面赋值也需要赋值该类型的值。

(2)Number 数字类型:

var decLiteral: number = 6;
var hexLiteral: number = 0x9837abdef;
var binaryLiteral: number = 0b0010;
var octalLiteral: number = 0o74563;

(3)String 字符串类型:

var name: string = "bob";
name = 'smith';

var name: string = `Gene`;
var age: number = 37;
var sentence: string = `Hello, 我是 ${ name },下个月我将 ${ age + 1 }岁了!`

var sentence1: string = 'Hello, 我是'+  name +',下个月我'+ (age + 1)+'岁了!'`

(4)Array 数组类型:

var list: Array<number> = [1, 2, 3];
//或者
var list: number[] = [1, 2, 3];//数组中的所有元素都是数字类型
var list: any[] = [1, 2, 3,'a'];//数组中所有元素都是任意类型

(5)Tuple 元组类型:即表达固定数量的已知(相同/不同)类型集合,是数组类型的一种。

var x: [string, number];  // 声明一个元组类型
x = ['hello', 10]; // 准确
x = [10, 'hello']; // 错误
console.log(x[0].substr(1)); // 正确
console.log(x[1].substr(1)); // 错误,'number' 类型没有 'substr' 方法
//当访问的索引超过边界时,将使用联合类型处理
x[3] = 'world'; // 正确,string允许被分配到 (string | number)
console.log(x[5].toString()); // 正确,'string' 和 'number' 都有 toString 方法
x[6] = true; // 错误,布尔值不是 (string | number) 中的一种

(6)Enum 枚举类型:包括数字枚举,字符串枚举,异构枚举,const枚举。

//1.数字枚举
enum Color {Red = 1, 'Green', Blue}; //给Red设置初始化值为1,之后的元素以此在,前一个元素值1的基础上+1,即1,2,3。
//如果enum Color {Red, Green, Blue};则Red默认从0开始,之后的元素以此在,前一个元素值1的基础上+1。即0,1,2
console.log(Color.Red)  //输出结果为1
console.log(Color[2])  //输出结果为Green
var colorName: string = Color[1];
var colorName: Color = Color[1];
alert(colorName); //输出的是Red,即枚举类型Color值为1的对应的元素名称。

//2.字符串枚举
enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}

//3.异构枚举:即混合字符串和数字成员
enum BsEnum {
    No = 0,
    Yes = "YES",
}

//4.常量枚举:常量枚举只能使用常量枚举表达式,并且不同于常规的枚举,它们在编译阶段会被删除。
const enum Enum {
    A = 1,
    B = A * 2
}

(7)Any 任意类型:

var notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // 正确,因为notSure是不确定的类型,即可以是任意类型

notSure.ifItExists(); // 正确,在运行时有可能有 ifItExists 这个方法
notSure.toFixed(); // 正确,toFixed 是真实存在的方法 (但是编译器不会验证准确性)
var prettySure: Object = 4;
prettySure.toFixed(); // 错误,Object类型没有toFixed()方法。

var list: any[] = [1, true, "free"];
list[1] = 100;  //正确


let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;  //数组的只读,即不能修改数组元素,数组长度,新增/删除数组元素。
ro[0] = 12; // 错误,只读数组下不能修改数组元素值!
ro.push(5); // 错误,只读数组下不能添加/删除数组元素!
ro.length = 100; // 错误,只读数组下不能修改数组长度!
a = ro; // 错误,只读数组下不能将该只读数组赋值给其他变量!
a = ro as number[];  //正确,只读数组,可以通过‘类型断言 as’的方式修改只读数组的类型,并可以赋值给其他变量。
//ro as number[],或ro as boolean即将ro类型重写成数字数组/boolean类型

(8)Void没有类型:一般用于没有返回值的函数。

function warnUser(): void { //void就像any的相反面:void就是没有,any就是所有。没有返回值的函数就可以认为是'void'类型:
    alert("This is my warning message");
}


var unusable: void = undefined;//不建议声明一个变量是 void类型,因为这个变量就只能赋值undefined 或 null。

(9)Null类型和Underfined类型以及Never类型(Never是Null和Undefined类型的子类型):

var a:null=null; //null 类型只能赋值null或者不赋值
var b:undefined=undefined; //undefined 类型只能赋值undefined或者不赋值
var c:undefined | number;
var d:undefined | null |number; //要么不赋值,要么赋值为null/undefined/number
console.log(c); //申明不赋值/申明赋值


let e:never;//代表从来不会出现的值

e=(()=>{ //never类型很少用 比如用在这里
    throw new Error('报错')
})

2、函数返回值类型,参数类型,默认参数,可选参数,不确定参数个数的参数,函数重载:

function fun(x:string):void{  //函数没有返回
    //表示函数fun的参数x是字符串类型,且函数没有返回。否则报错。
}

function fun(x:string):number{//函数有返回值 且返回值类型是number
    //表示函数fun的参数x是字符串类型,且函数有返回值(return) 返回值类型是数字类型。否则报错。
}

function fun(x:number=1):number{ //函数默认参数,在必选参数之后
    //表示函数fun的参数x默认值为1,且函数有返回值(return) 返回值类型是数字类型。否则报错。
}


function fun(x?:string):number{//函数可选参数,在必选参数之后
    x?true:false;
    //表示函数fun的参数x可传可不传,可选参数和默认参数必须在必选参数后面,且函数有返回值(return) 返回值类型是数字类型。否则报错。
}

function fun(...args:any[]):number{//不确定个数的参数
    args.forEach((item)=>{

    })
    //表示函数fun的参数args个数不确定,可选参数和默认参数必须在必选参数后面,且函数有返回值(return) 返回值类型是数字类型。否则报错。
}

var fun(x:number,y:number)=>number=function(x:number,y:number):number{
    return x+y
}
//或简写为
var fun(x:number,y:number)=>number=function(x,y){
    return x+y
}

//函数重载(即同名函数),调用fn4函数时,里面的参数要么全是number类型,要么全是string,否则报错。
function fn4(x:number,y:number):number;
function fn4(x:string,y:string):string;
function fn4(x:any,y:any):any{
    if(typeof x=='number'){
        return x*y
    }else{
        return x+y
    }
};

3、TypeScript接口:

interface LabeledValue {  //interface:定义一个接口
  label: string;  //接口类型必填属性
  color?: string; //接口类型可选属性 "?"
  readonly y: number;  //只读,即只能读取LabeledValue.y的值,不能修改和删除
}

function printLabel(labeledObj: LabeledValue) {
  console.log(labeledObj.label);
}

let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);


interface ReadonlyStringArray {
  readonly [index: number]: string;
}
let myArray: ReadonlyStringArray = ["Alice", "Bob"];
myArray[2] = "Mallory"; // 错误,下标索引是数字类型,且只读,即不能对下标索引进行重写赋值。只能读取下标索引对应的值。

4、TypeScript类型断言:

//1. 尖括号 类型断言:
function fun():string | number[]{
    if(Math.random<.5){
        return 'Ace'
    }else{
        return [28]
    }
}
let a: string | number[]=fun();
(<string>a).length;
(<number[]>a).push(0);
//2. as 类型断言:
let b=a as string;
b.length;

5、TypeScript类:

class Animal {
    name:string;
    constructor(name:string) { 
        this.name = name; 
    }
    move(distanceInMeters: number = 0) :void{
        console.log(`${this.name} moved ${distanceInMeters}m.`);
    }
}

 

 

 

 

 

 

 

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在Android开发中,为了提升用户体验和视觉效果,背景模糊化处理是一种常用的设计手段。它可以为应用界面增添层次感,同时突出显示主要内容。本文将详细介绍如何在Android中实现背景模糊化功能。 首先,我们需要获取当前设备的壁纸作为背景。这可以通过WallpaperManager类来完成。调用WallpaperManager.getInstance(this.getContext())可以获取壁纸管理器实例,然后通过getDrawable()方法获取当前壁纸的Drawable对象。接下来,需要将壁纸Drawable转换为Bitmap对象,因为模糊处理通常需要在Bitmap上进行。可以通过((BitmapDrawable) wallpaperDrawable).getBitmap()来完成这一转换。 模糊处理的核心是使用Android的RenderScript API。RenderScript是一种高效的并行计算框架,特别适合处理图像操作。在blur()方法中,我们创建了一个RenderScript实例,并利用ScriptIntrinsicBlur类来实现模糊效果。ScriptIntrinsicBlur提供了设置模糊半径(setRadius(radius))和执行模糊操作(forEach(output))的方法。模糊半径radius可以根据需求调整,以达到期望的模糊程度。 然而,仅依赖ScriptIntrinsicBlur可能无法达到理想的模糊效果,因此我们还需要对原始图片进行缩放处理。为此,我们设计了small()和big()方法。先将图片缩小(small()),然后执行模糊操作,最后再将图片放大(big())。这种方式不仅可以增强模糊效果,还能在一定程度上提高处理速度。在small(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值