TypeScript:语法、关键字

在这里插入图片描述
记录部分常见的语法关键字及其简单说明、用法

语法、关键字

类型断言/转换 as语法

在值的后面使用 as Type 明确指定某个值的具体类型

// as
let asRoot = document.getElementById('root') // asRoot: HTMLElement | null
let asRoot1 = document.getElementById('root') as HTMLElement // asRoot1: HTMLElement

// 定义一个常量字面量
const Colors = {
    Red: 'red',
    White: 'white'
} as const

! 尾语法

从前面的表达式里移除 null 和 undefined

// !
let root1 = document.getElementById('root')! // root1: HTMLElement

extends 关键字

含义

  • 继承/拓展的含义 - 约束 - 分配

继承父类的方法和属性(js)

通过extends继承后者(父类)的属性、方法

class Animal {
    kind = 'animal'
    constructor(kind: string) {
        this.kind = kind
    }
    sayHello() {
        console.log(`Hello, I am a ${this.kind}`)
    }
}

class Dog extends Animal {
    constructor(kind: string) { super(kind) }
    bark() {
        console.log('wang wang')
    }
}

const dog = new Dog('dog')
dog.bark() // wang wang
dog.sayHello() // Hello, I am a dog

继承/拓展类型

通过extends继承后者(父类型)的属性定义

// extends 关键字  继承/拓展类型
interface Animal1 {
    kind: string
}
interface Dog1 extends Animal1 {
    bark: () => void
}
// Dog1: { kind:string, bark: () => void }
const dog1: Dog1 = { kind: 'dog', bark: () => { } }

泛型约束

对传入的参数进行一定的限制

// extends 关键字  泛型约束
function getIds<T extends { id: string | number }>(list: T[]) {
    if (!list || !list.length) return []
    return list.map(it => it.id)
}
interface TItem { id: string | number, [propName: string]: unknown }
let list: TItem[] = [{ a: 1, id: 1 }]
let ids = getIds(list)
console.log(' ====> ids', ids);

条件类型与高阶类型

SomeType extends OtherType ? TypeTrue : TypeFalse
大致意思是:类型 SomeType 是否可以分配给 OtherType,而不是说SomeType是OtherType的子集。

type TypeName<T> =
    T extends string ? string :
    T extends number ? number :
    T extends boolean ? boolean :
    T extends undefined ? undefined :
    T extends Function ? Function :
    T extends Array<any> ? T :
    object

type TN1 = TypeName<string>  // TN1 = string
type TN2 = TypeName<[]> // TN2 = any[]
type TN3 = TypeName<string[]> // TN2 = string[]
let tn3: TN3 = ['d']
let tn4: string extends TN1 ? TN1 : number = '1' // tn4: string

keyof

主要同于类型推导

访问动态类型

// 这里表达的含义: 参数key 是 T中的属性名称类型之一
function getProps<T>(item: T, key: keyof T) {
    return item[key] === undefined ? '--' : item[key]
}
let list1: object[] = []
let res = list1.map((item: object) => {
    return { ...item }
})
// let res = ([] as object[]).map((item: object) => {
//     return { ...item }
// })
getProps({ name: 2 }, 'name') // 2

typeof

获取一个变量的类型并且能够用来声明新的变量

const Colors1 = { red: 'red', blue: 'blue' }

function getColorProp(key: keyof typeof Colors1) {
    return Colors1[key]
}
let cRed = getColorProp('red')

type Color2 = keyof typeof Colors1 // type Color2 = "red" | "blue"

in 类型映射

//in 类型映射
type A = { age: number, id: string }
type User = {
    [K in keyof A]: string
    // c: string @errors 映射的类型可能不声明属性或方法。ts(7061) 应该使用 交叉类型 & { c: string }
} & { f: string }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Typescript最新版本的关键字汇总包括以下内容: 1. 修饰符:public、private、protected、readonly等。这些修饰符用于声明类的成员的可访问性和可修改性。 2. 类型声明:type、interface、enum以及class等。通过这些关键字,我们可以声明自定义类型、接口、枚举和类。 3. 控制流程:if、else、for、while等。这些关键字用于控制程序的流程和条件。 4. 异常处理:try、catch、finally等。通过这些关键字,我们可以处理和捕获异常,并在需要时执行清理操作。 5. 函数相关:function、return、async等。这些关键字用于声明和定义函数,并指定函数的返回类型和异步操作。 6. 模块化:import、export等。通过这些关键字,我们可以导入和导出模块,实现代码的模块化和代码复用。 7. null和undefined:null、undefined。这些关键字用于表示空值和未定义的值。 8. 运算符:typeof、instanceof等。这些关键字用于判断变量的类型和对象的实例。 9. 引用:this、super等。这些关键字用于引用当前类的实例或父类的实例。 10. 其他:await、as、from、set、get等。这些关键字用于一些特定的语法操作,如异步等待、类型断言、迭代器等。 总的来说,Typescript最新版本的关键字涵盖了类的访问性和可修改性、类型声明、流程控制、异常处理、函数定义、模块化、空值和未定义、运算符、引用等方面,提供了丰富的语法和功能,使得开发者能够更加灵活和高效地编写类型安全的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值