当前位置:网站首页>TypeScript学习1——数据类型
TypeScript学习1——数据类型
2022-07-25 14:59:00 【盖玥希圈外男友(섭소우)】
说明
本文学习自掘金大神的文章https://juejin.cn/post/7003171767560716302,原作者是伟大的兔神。
JavaScript内置类型
// number
let n:number=1;
// string
let s:string="str";
// boolean
let b:boolean=true;
// undefined
let u:undefined=undefined;
// null
let ne:null=null;
// object
let obj:object={};
// bigint
let bi:bigint=10n;
// symbol
let sy:symbol=Symbol("mySymbol");Array
两种定义方式:
// 定义方式1
let arr1:string[]={'你好','hello'};
// 定义方式2
let arr2:Array<string>={'你好','hello'};Tuple
// 元组可以定义不同元素类型的数组
let t:[string,number,boolean]=['hello',522,false];元组规定了数组的长度和元素类型,类型或长度不匹配均会报错。对于不确定类型和长度的数组,可以用any[]来定义。
undefined和null
默认情况下,null和undefined是所有类型的子类型。也就是说,可以把undefined和null赋给任意类型的变量。
let m:number=2;
m=undefined;void
void表示没有任何类型。声明变量为void是没有意义的,只会在函数没有返回值时声明为void。
注意,没有返回值的函数将得到undefined,但仍然要声明为void,否则会报错。
unknown和any
any会跳过类型检查器对值的检查,任何值都可以赋值给any类型。
let a: any = 123;
a = '456';
a = false;unknown可以实现同样的效果。
let a: unknown = 123;
a = '456';
a = false;其最大区别是,任何类型的值可以赋值给any,同时any类型的值也可以赋值给任何类型;但对于unknown ,任何类型的值都可以赋值给它,但它只能赋值给unknown和any。
let a: unknown = 123;
let b: any = 123;
let c: number = 123;
// c = a;//报错
// a = c;//可以
// b = c;//可以
c = b;//可以在对unknown类型执行操作之前,必须对其进行范围的缩小。
let obj: unknown = {
x: 1,
}
// console.log(obj.getX());//报错
// 1、使用typeof
if (typeof obj === 'object' && obj !== null) {
console.log(obj.toString());
}
// 2、类型断言
console.log((obj as object).toString())never
never表示永远不存在的值的类型,分两种情况:函数执行过程中抛出异常,因此永远不会有返回值;函数体内是死循环,永远不会有返回值。
// 抛出异常
function tErr(): never {
throw new Error('error');
}
// 死循环
function noRes(): never {
while (true);
}never与其他类型联合后,将没有never。
// type t = string | number
type t = string | number | never类型断言
类似于类型转换。
let str: any = "hello";
// 1、括号语法
let l: number = (<string>str).length;
// 2、as语法
let l2: number = (str as string).length;类型推论
没有指定变量类型时,TS会自动推断出具体的类型。
let s = 'hello';
// s = 123;//报错,因为上面s被推断为string类型
let temp;
temp = 'hello';
temp = 1;//可以,因为在最上面temp被推断为any类型联合类型
类型取值为多种类型中的一种。
let a: string | number = 'hello';
a = 123;交叉类型
将多个类型合并为一个类型,把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。
interface IA {
name: string
age: number
}
interface IB {
name: string
id: number
}
// 需要包含IA和IB的所有属性
let a: IA & IB = {
name: 'Jack',
age: 11,
id: 1
}a既是IA类型,也是IB类型。
边栏推荐
- Raft of distributed consistency protocol
- 45padding不会撑开盒子的情况
- Bridge NF call ip6tables is an unknown key exception handling
- Implement a simple restful API server
- Unable to start web server when Nacos starts
- 直播课堂系统05-后台管理系统
- 二维数组赋初值你会几种方法?
- Qt connect 中, SIGNAL,SLOT 与 lambda 对比
- Gameframework making games (II) making UI interface
- C#,C/S升级更新
猜你喜欢

41 picture background synthesis - colorful navigation map

37 element mode (inline element, block element, inline block element)

EDA chip design solution based on AMD epyc server

Leetcode-198- house raiding

I2C device driver hierarchy
![[Nacos] what does nacosclient do during service registration](/img/76/3c2e8f9ba19e36d9581f34fda65923.png)
[Nacos] what does nacosclient do during service registration

Browser based split screen reading

44 新浪导航 ,小米边栏 练习

39 简洁版小米侧边栏练习

IP地址分类,判断一个网段是子网超网
随机推荐
Add the jar package under lib directory to the project in idea
Spark parameter adjustment and tuning
ESXI6.7.0 升级到7.0U3f(2022年7月12 更新)
【MySQL必知必会】触发器 | 权限管理
Gameframework making games (I)
awk从入门到入土(21)awk脚本调试
[MySQL series] - how much do you know about the index
Award winning interaction | 7.19 database upgrade plan practical Summit: industry leaders gather, why do they come?
String type time comparison method with error string.compareto
Unable to start web server when Nacos starts
gson与fastjson
37 元素模式(行内元素,块元素,行内块元素)
As methods for viewing and excluding dependencies
The solution to the problem that the progress bar of ros2 installation connext RMW is stuck at 13%
When using jetty to run items, an error is reported: form too large or form too many keys
微信公众号正式环境上线部署,第三方公众平台接入
万能通用智能JS表单验证
Vs2010添加wap移动窗体模板
Spark 参数配置的几种方法
MySQL的登陆【数据库系统】