created at 2023/08/05 04:26:21
updated at 2023/08/05 04:57:47
typescript
class Test {
constructor() {}
}
interface Student {}
type Info = {};
typescript
let t: Test;
let s: Student;
let i: Info;
注:不能将类型赋值给变量
基于赋值表达式推断类型的能力称之为
类型推断
typescript
let num = 2; // 类型推断为 number
num = '12'; // 将string赋值给number显然是不可以的
类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。
typescript
// 以下写法为双重断言
//<类型>值
let str = '1';
let num1: number = <number>(<unknown>str);
console.log(typeof num1); //string
//值 as 类型
let num2: number = str as unknown as number;
console.log(typeof num2); //string
typescript
// foo 为{}时并不明确是否有bar,bas这两个属性
// 断言为Foo类型,就不会存在这个问题,并且可以获得代码提示
// 但这么做并不易于维护
interface Foo {
bar: number;
bas: string;
}
const foo = {} as Foo;
foo.bar = 123;
foo.bas = 'hello';
注: 类型断言是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。
当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言是危险的,如果你想这么做,你可以使用 any。
! 可以用于断言操作对象是非 null 和非 undefined 类型
typescript
let str: null | undefined | string;
str!.toString();
typescript
let x: number;
initialize();
// Variable 'x' is used before being assigned.(2454)
console.log(2 * x); // Error
function initialize() {
x = 10;
}
typescript
let x!: number;
initialize();
console.log(2 * x); // Ok
function initialize() {
x = 10;
}