TypeScript泛型及基本数据类型学习

本文通过示例代码介绍了TypeScript中泛型函数的使用方法,并演示了如何定义数组、元组及枚举类型。此外,还探讨了枚举类型在switch语句中的应用及可能遇到的问题。

啥也不说,直接上代码

function echo<T>(t:T): T {
    return t;
}

console.info("传入字符串:"+echo("字符串"));
console.info("传入数字:"+echo(3));
console.info("传入布尔值:"+echo(true));
let fruits:string[] = ["apple","banana","orange","pear"];//第一种数组定义方式
let foods:Array<string> = ["rice","noodle","bread","meat"];//第二种数组定义方式
console.info("传入水果数组:"+echo(fruits));
console.info("传入食物数组:"+echo(foods));
//let my_tuple:[string,number]=["abc",123];
let my_tuple:[string,number];
my_tuple=["abc",123];
my_tuple[0]="def";
my_tuple[1]=456;
console.info("传入元组:"+my_tuple);
enum WEEKDAY{
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}

// enum WEEKDAY2{
//     SUNDAY=0,MONDAY=1,TUESDAY=2,WEDNESDAY=3,THURSDAY=4,FRIDAY=5,SATURDAY=6
// }
let day : WEEKDAY;
day=WEEKDAY.SUNDAY;

console.info("传入枚举对象:"+day);
switch(day as number){/**注意:如果不加as any 这一句,后面语句会报 Type '***' is not comparable to type '***'.ts(2678),具体原因我还没搞懂 */
    case WEEKDAY.SUNDAY:
        console.info("今儿个礼拜天啊,好好睡一觉啊...");
        break;
    case WEEKDAY.FRIDAY:
        console.info("今儿个礼拜五啊,明天就休息哈...");
        break;
}

代码执行结果:

PS D:\ts_demo> tsc .\MyGeneric.ts 
PS D:\ts_demo> node .\MyGeneric.js
传入字符串:字符串
传入数字:3
传入布尔值:true
传入水果数组:apple,banana,orange,pear
传入食物数组:rice,noodle,bread,meat
传入元组:def,456
传入枚举对象:0
今儿个礼拜天啊,好好睡一觉啊...

 

备注:关于TS枚举类型在switch语句中告警问题StackOverflow网站有大神解说过,我附上地址,有兴趣小伙伴可取查看。

地址在这里

https://stackoverflow.com/questions/55018730/error-ts2678-type-string-is-not-comparable-to-type-in-angular-5
 

### TypeScript 的使用方法 在 TypeScript 中,允许创建可重用的组件,这些组件能够处理多种数据类型而不牺牲类安全性。通过定义,可以在不指定具体类的情况下编写灵活且强类的代码。 #### 创建 要创建一个,需先声明带有类参数的接口或类别名: ```typescript // 声明一个简单的接口 interface Box<T> { content: T; } // 使用此接口实例化不同类的对象 const stringBox: Box<string> = { content: "hello world" }; const numberBox: Box<number> = { content: 42 }; ``` 上述例子展示了如何利用 `Box` 接口封装任意类的值[^1]。 #### 应用于函数 对于希望接受并返回相同类的输入输出场景,可以通过如下方式实现: ```typescript function identity<T>(arg: T): T { return arg; } ``` 这里定义了一个名为 `identity` 的函数,其接收单个参数 `arg` 并原样返回。由于采用了形式 `<T>` ,所以无论传递何种类的实参都能正常工作[^2]。 #### 添加约束条件 有时可能需要限制所能表示的具体类集合。此时可通过引入 extends 关键字来设定边界: ```typescript function getProperty(obj: T, key: K): V { return obj[key as keyof T]; } class Point { constructor(public x: number, public y: number) {} } let p = new Point(0, 0); console.log(getProperty(p, 'x')); // 输出:0 ``` 在这个案例中,为了确保获取的对象属性确实存在,给定的第二个参数应当是目标对象的有效键名称之一;因此对进行了相应的约束[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值