ts数据类型#2

1. any类型

不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段,可以使用 any类型来标记这些变量。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
let list: any[] = [1, true, "free"];
list[1] = 100;
2. object

object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法。(下面的代码都已经打印出来了‘b.join():5-abc’,但是依然报了错)

any也允许你给它赋任意值 - 而且能够在它上面调用任意的方法。

let a:any = [5, 'abc'];
console.log('a.toFixed():', a.join('-'))

let b:object = a;
console.log('b.toFixed():', b.join('-')) // Property 'join' does not exist on type 'object'.

// b = 4; // error:不能将4赋给object类型

a.push('88')
console.log('b a:', b, a)   // b a: [5, "abc", "88"] [5, "abc", "88"]

b = [4]
console.log('b a:', b, a)   // b a: [4] [5, "abc", "88"]
3. 枚举enum

枚举有点像数组,它有个元素编号,从0开始,用法又有点像js对象。

enum Color {Red, Green, Blue}
console.log(Color) // {0: "Red", 1: "Green", 2: "Blue", Red: 0, Green: 1, Blue: 2}

看到打印的值,就明白了,它既可以通过编号获取定义的值,也可以通过定义的值,获取编号。

enum Color {Red = 1, Green}
enum Color {Red2 = 5, Green2}
console.log(Color) 
// {1: "Red", 2: "Green", 5: "Red2", 6: "Green2", Red: 1, Green: 2, Red2: 5, Green2: 6}

可以重复声明,而且编号可以手动修改。

enum Color {Red = 1, Green = 6}
enum Color {Red2 = 5, Green2}
console.log(Color) 
// {1: "Red", 5: "Red2", 6: "Green2", Red: 1, Green: 6, Red2: 5, Green2: 6}

手动声明,有可能导致意料之外的错误,Green被覆盖了。
Green的下标是6,Green2的下标也是6,后执行的把先执行的覆盖了。

4. 函数的返回类型:void never
5. 类型断言

类型断言并不能强制转换,也不会进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你(程序员),已经进行了必须的检查。
语法,其一是“尖括号”语法:

let someValue: any = 123;
let strLength: number = (<string>someValue).length;
console.log(strLength) // undefined  
(不能强制转换,number变量并没有length属性)


另一个为as语法:(在.jsx文件里,只能用这种)

let someValue: any = "123";
let strLength: number = (someValue as string).length;
console.log(strLength) // 3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。