TS 中 as 用法

6,236 阅读2分钟

image.png

“as” 运算符是类型声明

举一个简短的例子,假设您有两种类型:第一和第二。您正在编写一个方法,而该方法并不完全知道您的对象将属于哪种类型。它可以是First或Second的类型。

因此,您声明的变量没有严格的类型。一旦您的方法知道了变量应采用的类型,就可以“按该类型”返回它。

这似乎有点模糊和模棱两可,但是“ as”运算符实际上执行的功能与另一个(更熟悉的)模式完全相同: 这两个代码段做的完全相同

    let accountCode = '123';
    let castedAccountCode = <number>accountCode;

用作关键字:

    let accountCode = '123';
    let castedAccountCode = accountCode as number;

那不是普通的JavaScript,而是TypeScript。无论如何,都应将类型化对象视为普通的未类型化JavaScrpt对象。 Caused by:org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction 关键字是TypeScript中的类型声明,它告诉编译器将对象视为不同于编译器推断出的对象类型的另一种类型。

拓展:

  • 类型断言---as
    把一个大的范围断言成小的、精确的范围
type Method = 'GET' | 'POST'
function dd(url: string, method: Method) {
    console.log('lll');

};
let option = {
    url: 'https:',
    method: 'POST'
}
// dd(option.url, option.method)第二个参数会报错的,因为option.method的值是个字符串类型,而不是自己定义的Method类型
//可以用类型断言 as 因为string类型是大的范围,缩小到'POST'和'GET'这种小范围的类型
dd(option.url, option.method as Method)


//当然也可以给option定义一个类型
type getOption = {
    url: string,
    method: Method
}
let option:getOption  = {
    url: 'https:',
    method: 'POST'
}
dd(option.url, option.method)

  • 非空类型断言----!
    表示确定某个标识符是有值的,跳过ts在编译阶段对它的检测
function aa(value?:string){
    //加上 ! 的意思是确保value一定是有值的
    console.log(value!.length);
}
aa('ppp');
  • 可选链操作符----?.
    它的作用是当对象的属性不存在时,会短路,直接返回undefined,如果存在,那么才会继续执行。
type person = {
    name: string,
    age: number,
    friend?: {
        name: string,
        age?: number
    }
}
let p: person = {
    name: '张三',
    age: 10,
}
console.log(p.friend?.name);
  • ?? 和 !!的作用
    !! 将一个其他类型转换成boolean类型,类似于Boolean()
    ?? 空值合并操作符,当操作符的左侧是null或者undefined时,返回其右侧操作数,否则返回左侧操作数
let ss:string|null|undefined=undefined;
console.log(ss??'你好');
//ss??'你好' 可以给ss添加默认值 '你好' 意思就是如果 ss有值而且不是null和undefined时,ss就是上面赋给的值,如果是null或者undefined,ss的值就是默认值'你好'