说说 Typescript 的数据类型有哪些?

图片

一、是什么

typescript 和 javascript几乎一样,拥有相同的数据类型,另外在javascript基础上提供了更加实用的类型供开发使用

在开发阶段,可以为明确的变量定义为某种类型,这样typescript就能在编译阶段进行类型检查,当类型不合符预期结果的时候则会出现错误提示

二、有哪些

typescript 的数据类型主要有如下:

  • boolean(布尔类型)

  • number(数字类型)

  • string(字符串类型)

  • array(数组类型)

  • tuple(元组类型)

  • enum(枚举类型)

  • any(任意类型)

  • null 和 undefined 类型

  • void 类型

  • never 类型

  • object 对象类型

boolean

布尔类型

let flag:boolean = true;
// flag = 123; // 错误
flag = false;  //正确

number

数字类型,和javascript一样,typescript的数值类型都是浮点数,可支持二进制、八进制、十进制和十六进制

let num:number = 123;
// num = '456'; // 错误
num = 456;  //正确

进制表示:

let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制

string

字符串类型,和JavaScript一样,可以使用双引号(")或单引号(')表示字符串

let str:string = 'this is ts';
str = 'test';

作为超集,当然也可以使用模版字符串``进行包裹,通过 ${} 嵌入变量

let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }

array

数组类型,跟javascript一致,通过[]进行包裹,有两种写法:

方式一:元素类型后面接上 []

 let arr:string[] = ['12', '23'];
 arr = ['45', '56'];

方式二:使用数组泛型,Array<元素类型>

let arr:Array<number> = [1, 2];
arr = ['45', '56'];

tuple

元祖类型,允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

let tupleArr:[number, string, boolean]; 
tupleArr = [12, '34', true]; //ok
typleArr = [12, '34'] // no ok

赋值的类型、位置、个数需要和定义(声明)的类型、位置、个数一致

enum

enum类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

any

可以指定任何类型的值,在编程阶段还不清楚类型的变量指定一个类型,不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查,这时候可以使用any类型

使用any类型允许被赋值为任意类型,甚至可以调用其属性、方法

let num:any = 123;
num = 'str';
num = true;

定义存储各种类型数据的数组时,示例代码如下:

let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;

null 和 和 undefined

JavaScript 中 null表示 "什么都没有",是一个只有一个值的特殊类型,表示一个空对象引用,而undefined表示一个没有设置值的变量

默认情况下nullundefined是所有类型的子类型, 就是说你可以把 null和 undefined赋值给 number类型的变量

let num:number | undefined; // 数值类型 或者 undefined
console.log(num); // 正确
num = 123;
console.log(num); // 正确

但是ts配置了--strictNullChecks标记,nullundefined只能赋值给void和它们各自

void

用于标识方法返回值的类型,表示该方法没有返回值。

function hello(): void {
    alert("Hello Runoob");
}

never

never是其他类型 (包括null和 undefined)的子类型,可以赋值给任何类型,代表从不会出现的值

但是没有类型是 never 的子类型,这意味着声明 never 的变量只能被 never 类型所赋值。

never 类型一般用来指定那些总是会抛出异常、无限循环

let a:never;
a = 123; // 错误的写法

a = (() => { // 正确的写法
  throw new Error('错误');
})()

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

object

对象类型,非原始类型,常见的形式通过{}进行包裹

let obj:object;
obj = {name: 'Wang', age: 25};

三、总结

javascript基本一致,也分成:

  • 基本类型

  • 引用类型

在基础类型上,typescript增添了voidanyemum等原始类

### Vue2 和 Vue3 的主要区别及功能改进 #### 1. **响应式系统的差异** Vue 3 在响应式系统方面进行了彻底重构,采用基于 Proxy 的实现替代了 Vue 2 中使用的 `Object.defineProperty` 方法。Proxy 不仅提供了更高的性能,还支持更多的数据类型(如数组和对象的嵌套),使开发者无需再担心某些场景下的响应式问题[^3]。 --- #### 2. **性能提升** Vue 3 的核心库体积更小,运行效率更高。得益于全新的编译器优化策略以及虚拟 DOM 的改进,Vue 3 能够显著减少不必要的重新渲染操作,从而提高整体性能。此外,Vue 3 还引入了分块技术,进一步降低了初始加载时间[^4]。 --- #### 3. **组合式 API (Composition API)** Vue 3 推出了 Composition API,这是一种新的代码组织方式,允许开发者将逻辑按功能模块拆分而不是局限于生命周期钩子函数内部。这种方式特别适合复杂的业务逻辑场景,有助于改善代码复用性和可读性[^4]。 ```javascript // Vue 2 Options API 示例 export default { data() { return { count: 0 }; }, methods: { increment() { this.count++; } } }; // Vue 3 Composition API 示例 import { ref } from 'vue'; export default { setup() { const count = ref(0); function increment() { count.value++; } return { count, increment }; } }; ``` --- #### 4. **TypeScript 支持** Vue 3 对 TypeScript 提供了全面的支持,官方团队投入大量精力确保其类型推导能力达到最佳状态。这使得使用 TypeScript 开发 Vue 应用变得更加流畅自然[^4]。 --- #### 5. **路由与 Vuex 升级** - **Vue Router**: Vue 3 配备的新版 vue-router@4 更加现代化且灵活,完全兼容 Composition API 同时增强了对 TypeScript 的友好程度[^2]。 - **Vuex**: 新版本 Vuex 也已迁移到 Composition API 上下文中,提供了一种更加直观的方式来管理全局状态。 --- #### 6. **新增特性** 除了上述改动外,Vue 3 还带来了两项重要创新——**Teleport** 和 **Fragments**: - **Teleport**: 可以把某部分 DOM 移动至其他位置而不影响原有结构,非常适合模态框等跨区域组件设计。 - **Fragments**: 允许单个组件返回多个根节点,简化了特定布局需求下的编写过程。 --- #### 7. **全局 API 改进** 为了适应现代前端工程化趋势,Vue 3 修改了一些传统意义上的全局方法调用形式,改为更具语义化的导入机制。例如创建应用实例的操作从原来的 `new Vue()` 替换成了 `createApp()` 函数[^4]。 ```javascript // Vue 2 创建实例 const app = new Vue({ el: '#app', render: h => h(App) }); // Vue 3 创建实例 import { createApp } from 'vue'; const app = createApp(App); app.mount('#app'); ``` --- ### 总结 综上所述,Vue 3 相较于 Vue 2 主要在以下几个维度实现了突破:响应式体系架构革新、性能指标全面提升、新型编程范式的引入以及生态工具链的整体迭代。这些改变共同构成了一个更快更强更适合未来发展的框架解决方案[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值