TS在实际开发中的使用

TS的基础使用

// 数字
let num = ref<number>(100)

// 文字
let str = rer<string>('文字')

// boolean
let bo = ref<boolean>(true)

// null
let n = ref<null>(null)

// undefined
let u = ref<undefined>(undefined)

// nan
let na = ref<NaN>(NaN)

// 任意类型
let a = ref<any>('任意类型')

// 多个不固定类型
let str = rer<string | number>('文字')  // 可以是字符串也可以是数字

数据类型不固定情况下的使用

// 联合类型
let s = ref<number | string>('文字') // 既可以保存文字也可以保存数字
// 数字、boolean、数组等同理
let s = ref<number[] | Array<string> | boolean>(true)

TS在数组中的使用

// 数字数组
let numArr = ref<number[]>([1,2,3])
let numArr2 = ref<Array<number>>([1,2,3])

// 文字数组
let strArr = ref<string[]>(['1','2','3'])
let strArr2 = ref<Array<string>>(['1','2','3'])

// 元组
let arr : [string,number,boolean] = ['文字', 1 , true]

当系统不确定该类型是什么,但你知道该类型是什么的时候

// 类型推断
/*当系统不确定该类型是什么,但你知道该类型是什么的时候*/
// 案例:通过id来获取对应项
let data = {
        id:1,
        name : '东方不败'
    }

let arr = [
    {id:1,text:'艺术概论'},
    {id:2,text:'疾风劲草'},
]

arr.find(el=>el.id == data.id as number)
// 或
arr.find(el=>el.id == <number>data.id)

vue3的ref和reactive在TS中的应用

// ref
let num = ref<number>(100)  // 数字类型
let num2 = ref<number[]>([1,2,3]) // 数字类型的数组
// ...依此类推

// reactive
let str = ref<string>('疾风劲草')  // 字符串类型
let str2 = ref<string[]>(['疾风劲草','一臂之力']) // 字符串类型的数组
// ...依此类推

接口

?: 表明该数据是可选的
Object类型可以用接口约束

// 通过定义接口来实现对大量数据的类型定义
interface IArr {
    name : string;
    age : number;
    gender : boolean;
    address ?: '武汉'  // ?: 表明该数据是可选的
}
// 内部的键名需要跟接口对应上,顺序没有要求
let arr = reactive<IArr>({
    name : '疾风劲草',
    gender : true,
    age : 100
})

实际开发中,数据多且杂,处理方法

// 模拟数组嵌套对象
// 接口
interface IArr {
    name : string;
    age : number;
    gender : boolean;
    info : IInfo;  // 接口2使用
    
}
// 接口2
interface IInfo {
    id : number
    goodsName : string;
    price : number;
    status : boolean;
}

let arr = reactive<IArr>({
    name : '疾风劲草',
    gender : true,
    age : 100,
    info : {
        id : 1,
        goodsName : '书',
        price : 50,
        status : true,
    }
})


// 如果该用户有多个info信息,并且是一个数组,那么接口可以写成以下形式:
interface IArr {
    name : string;
    age : number;
    gender : boolean;
    info : IInfo[];  // 接口2使用
}
let arr = reactive<IArr>({
    name : '疾风劲草',
    gender : true,
    age : 100,
    info : [
    {
        id : 1,
        goodsName : '书',
        price : 50,
        status : true,
    },
    {
        id : 2,
        goodsName : '笔',
        price : 2,
        status : true,
    }
    ]
})

如果变量内有多个变量,且内部的变量是一个数组或者对象

// 可以使用解构的方法
// 接口
interface IArr {
    name : string;
    age : number;
    gender : boolean;
    info : IInfo;  // 接口2使用
    
}
// 接口2
interface IInfo {
    id : number;
    goodsName : string;
    price : number;
    status : boolean;
}

let user = reactive<{ arr : IArr }>{
    arr : {
        name : '疾风劲草',
        gender : true,
        age : 100,
        info : {
            id : 1,
            goodsName : '书',
            price : 50,
            status : true,
        }
    }
}

// *******************************************************

// 你也可以写成下面这种形式
// 该形式是接口嵌套,通过接口内部的arr来规范数据类型
interface IUser {
    arr : IArr
}
// 接口
interface IArr {
    name : string;
    age : number;
    gender : boolean;
    info : IInfo;  // 接口2使用
    
}
// 接口2
interface IInfo {
    id : number;
    goodsName : string;
    price : number;
    status : boolean;
}

let user = reactive<IUser>{
    arr : {
        name : '疾风劲草',
        gender : true,
        age : 100,
        info : {
            id : 1,
            goodsName : '书',
            price : 50,
            status : true,
        }
    }
}

将接口和数据全都抽离出来的场景应用

ts文件-抽离的数据

接口的ts文件

// 这里举个简单的例子,不同的场景其实都差不多
// ts文件抽离
interface IUser {
    name : string;
    age : number;
    gender : boolean;
    info : IInfo;  // 接口2使用
    
}
// 接口2
interface IInfo {
    id : number
    goodsName : string;
    price : number;
    status : boolean;
}

export type { IUser }

数据的ts文件

import { reactive } from "vue";

let userInfo = reactive({
        name : '疾风劲草',
        gender : true,
        age : 100,
        info : {
            id : 1,
            goodsName : '书',
            price : 50,
            status : true
        }
})
export { userInfo }

对应的页面使用

// 在需要使用的文件上使用
import { IUser } from './config'
import { userInfo } from './data'

let user = reactive<{value : IUser}>({value : userInfo})
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 Vite 开发递归的 TypeScript 插件的基本步骤: 1. 创建一个新的 TypeScript 项目,并运行 `npm init` 初始化项目。 2. 安装 Vite 和 TypeScript:`npm install vite typescript --save-dev`。 3. 在项目根目录下创建一个名为 `vite.config.ts` 的文件,并添加以下内容: ```typescript import { Plugin } from 'vite'; export default (): Plugin => { const pluginName = 'my-ts-plugin'; const tsPlugin: Plugin = { name: pluginName, async transform(code, id) { // TODO return null; }, }; return tsPlugin; }; ``` 这个配置文件导出了一个函数,该函数返回一个 Vite 插件对象。我们将在这个插件对象的 `transform` 方法编写递归的 TypeScript 转换逻辑。 4. 在 `transform` 方法编写递归的 TypeScript 转换逻辑。这里我们将使用 TypeScript 的 AST(抽象语法树)来遍历代码并进行转换。 ```typescript import ts from 'typescript'; import { Plugin } from 'vite'; export default (): Plugin => { const pluginName = 'my-ts-plugin'; const tsPlugin: Plugin = { name: pluginName, async transform(code, id) { if (id.endsWith('.ts')) { const sourceFile = ts.createSourceFile(id, code, ts.ScriptTarget.Latest, true); function visit(node: ts.Node) { if (ts.isCallExpression(node)) { const expression = node.expression; if (ts.isIdentifier(expression) && expression.text === 'recursiveTransform') { const [, arg] = node.arguments; if (ts.isStringLiteral(arg)) { const transformed = arg.text.split('').reverse().join(''); const replacement = ts.createStringLiteral(transformed); return replacement; } } } return ts.visitEachChild(node, visit, null); } const transformedSourceFile = ts.visitNode(sourceFile, visit); const transformedCode = ts.createPrinter().printFile(transformedSourceFile); return transformedCode; } return null; }, }; return tsPlugin; }; ``` 这个递归的 TypeScript 插件将会查找代码所有名为 `recursiveTransform` 的函数调用,并将其传递的字符串参数反转。我们将使用 TypeScript 的 `ts.createSourceFile` 方法将代码解析成 AST,然后使用 TypeScript 的 `ts.visitNode` 方法遍历 AST 并进行转换。最后,使用 TypeScript 的 `ts.createPrinter().printFile` 方法将转换后的 AST 打印成代码字符串。 5. 运行 `npm run dev` 启动 Vite 开发服务器,插件将自动加载并应用于 TypeScript 文件。 这就是使用 Vite 开发递归的 TypeScript 插件的基本步骤。当然,实际开发还需要考虑更多的细节和复杂性,例如插件的选项配置、插件的错误处理、插件的性能优化等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值