本文介绍: 在介绍变量声明基本数据类型泛型之前我们来先了解一下typescript1、什么typescript?TypeScript简称TS。TS和JS之间关系其实就是Less/Sass和CSS之间关系。就像Less/Sass是对CSS进行扩展一样, TS也是对JS进行扩展。就像Less/Sass最终会转换成CSS一样, 我们编写好的TS代码最终也会换成JS。TypeScript是JavaScript的超集,因为它扩展了JavaScript,有JavaScript没有的东西。硬要以父子类关系

在介绍变量声明基本数据类型泛型之前我们来先了解一下typescript

1、什么typescript?

TypeScript简称TS。
TS和JS之间关系其实就是Less/Sass和CSS之间关系
就像Less/Sass是对CSS进行扩展一样, TS也是对JS进行扩展
就像Less/Sass最终会转换成CSS一样, 我们编写好的TS代码最终也会换成JS。
TypeScript是JavaScript的超集,因为它扩展了JavaScript,有JavaScript没有的东西。
硬要以父子类关系来说的话,TypeScript是JavaScript子类继承的基础上去扩展。

2、为什么使用 typescript?

 1) 简单来说就是因为JavaScript是弱类型, 很多错误只有在运行时才会被发现
而TypeScript提供了一套静态检测机制, 可以帮助我们编译时就发现错误

 2)  支持诸如C,C++,Java,Go等后端语言中的特性 (枚举泛型类型转换命名空间声明文件、类、接口等)

 在我们了解typescript之后我们来了解下typescript中的变量声明类型、和泛型

1、变量声明

TypeScript 变量的命名规则

变量使用前必须先声明我们可以使用 var 来声明变量。

我们可以使用以下四种方式来声明变量:

1)声明变量的类型初始值

 2)声明变量的类型,但没有初始值,变量值会设置undefined

3)声明变量并初始值,但不设置类型,该变量可以任意类型: 

4)声明变量没有设置类型和初始值,类型可以任意类型,默认初始值undefined

var uname:string = "lilei"; 
var score1:number = 50;
var score2:number = 42.50
var sum = score1 + score2 
console.log("名字: "+uname) 
console.log("第一个科目成绩: "+score1) 
console.log("第二个科目成绩: "+score2) 
console.log("总成绩: "+sum)

 2、基本数据类型

1)八种内置类型

const str: string = ‘中国万岁’;
const num: number = ‘666’;
const bool: boolean = true;
const u: undefined = undefined;
const n: null = null;
const big: bigint = 100n;
const sym: symbol = Symbol(‘me‘);
const obj: object = {x: 1};

2)新增(下文会详细介绍新增几种类型用法)

枚举 enum

任意类型 any

空类void

元祖类型 Tupl

注意:

 void表示没有任何类型,和其他类型是平等关系,不能直接赋值:

let a: void; 
let b: number = a; // Error
复制代码

你只能为它赋予nullundefined(在strictNullChecks指定true时)。声明一个void类型的变量没有什么大用,我们一般也只有在函数没有返回值时去声明。

值得注意的是,方法没有返回值将得到undefined,但是我们需要定义void类型,而不是undefined类型。否则将报错:

function fun(): undefined {
  console.log("this is TypeScript");
};
fun(); // Error

  any类型

在 TS 中,任何类型都可以被归为any类型,any类型是类型系统的顶级类型。

如果是一个普通类型,在赋值过程中改变类型是不被允许的:

let a: string = '伊泽瑞尔,你需要地图吗?';
a = 666; // Type 'number' is not assignable to type 'string'
复制代码

但如果是any类型,则允许被赋值为任意类型:

let a: any = 666;
a = '哈哈哈';
a = false;
a = null;
a = undfined;
a = [];
a = {};
复制代码

如果变量在声明的时候,未指定其类型,那么它会被识别any类型:

let something;
something = '啦啦啦';
something = 888;
something = false;
复制代码

等价于:

let something: any;
something = '啦啦啦';
something = 888;
something = false;
复制代码

使用any类型就失去了使用TS的意义,长此以往会放松我们对自己的要求,尽量不要使用any

enum枚举

enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字

// 默认情况从0开始为元素编号,也可手动为1开始
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;

let colorName: string = Color[2];
console.log(colorName);  // 输出'Green'因为上面代码里它的值是2
复制代码

另一个很好的例子是使用枚举存储应用程序状态

3、泛型 Generics

软件工程的一个主要部分就是构建组件构建组件不仅需要具有明确的定义统一接口,同时也需要组件复用支持现有数据类型和将来添加数据类型组件为大型软件系统开发过程提供很好的灵活性。

C#Java中,可以使用”泛型“来创建复用组件,并且组件支持多种数据类型。这样便可以让用户根据自己的数据类型来使用组件

1) 泛型方法

在TypeScript里,声明泛型方法有以下两种方式:

function gen_func1<T>(arg: T): T {
    return arg;
}
// 或者
let gen_func2: <T>(arg: T) => T = function (arg) {
    return arg;
}
复制代码

调用方式也有两种:

gen_func1<string>('Hello world');
gen_func2('Hello world'); 
// 第二种调用方式可省略类型参数,因为编译器会根据传入参数来自动识别对应的类型。
复制代码

2) 泛型Any

Ts特殊类型 Any 在具体使用时,可以代替任意类型,咋一看两者好像没啥区别其实不然:

// 方法一:带有any参数的方法
function any_func(arg: any): any {
    console.log(arg.length);
		return arg;
}

// 方法二:Array泛型方法
function array_func<T>(arg: Array<T>): Array<T> {
	  console.log(arg.length);
		return arg;
}
复制代码

3)泛型类型

泛型接口

interface Generics_interface<T> {
    (arg: T): T;
}
 
function func_demo<T>(arg: T): T {
    return arg;
}

let func1: Generics_interface<number> = func_demo;
func1(123);     // 正确类型的实际参数
func1('123');   // 错误类型的实际参数

原文地址:https://blog.csdn.net/weixin_49354517/article/details/124423659

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31372.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注