作者回复: 1. 为什么 const str 的类型是 'abc'? 因为 str 是用 const 定义的,不可修改,是一个字符串字面量类型(string literal type);如果用 let 定义,类型就是 string 了 2. 为什么 const obj 里 str 的 type 是 string? obj 是地址引用,地址不可改变,但 str 的值是可以改变的,所以是 string 类型 3. 如何通过 const needAbc: typeof str = obj.str 类型检查? 除了你提到的3种方法,推荐使用常量断言(const assertion) const obj = { str: 'abc' } as const 这种方式会将对象的每个属性(支持深层)定义为只读
作者回复: 嗯,这个提示是之前没有的,加上 KeyboardEvent 类型就可以了。
作者回复: 关键问题是了解“{}”在TS中是什么类型,通过下面赋值可以知道: let a: {}; a = {p: 0}; // OK a = []; // OK a = 1; // OK a = "s"; // OK a = false; // OK a = null; // Error a = undefined; // Error 此外,还有object和Object,也需要注意: var b: object; b = {p: 0}; // OK b = []; // OK b = 1; // Error b = "s"; // Error b = false; // Error b = null; // Error b = undefined; // Error var c: Object; c = {p: 0}; // OK c = []; // OK c = 1; // OK c = "s"; // OK c = false; // OK c = null; // Error c = undefined; // Error 这些类型比较特殊,记住就好。
作者回复: T extends A1 表示,A1 = T 为 true(类型兼容),T 至少要具备 A1 的所有属性
作者回复: 第二种和第一种一样,但是不能用在 React 中,建议使用第三种。