理解类声明值与类型

2025-09-09 00:00

这段代码涉及到了 TypeScript 中类的构造函数、实例对象、类型等概念。让我们逐步解析每个部分,特别是 console.log(C.a) 报错的原因。

代码解析

 1class C {
 2  a = "123";  // 类实例属性
 3}
 4
 5let c: C = new C();  // 创建 C 类的一个实例
 6
 7console.log(c);  // 输出: C { a: '123' }
 8console.log(C);  // 输出: [Function: C],C 是构造函数
 9// console.log(C.a); // 报错:Property 'a' does not exist on type 'C'.
10console.log(c.a);  // 输出: 123
11console.log(c instanceof C);  // 输出: true

1. console.log(C) 输出的是构造函数

1console.log(C);  // 输出: [Function: C]

2. console.log(C.a) 报错的原因

1// console.log(C.a); // 报错:Property 'a' does not exist on type 'C'.

3. console.log(c.a) 正常输出 123

1console.log(c.a);  // 输出: 123

4. console.log(c instanceof C) 输出 true

1console.log(c instanceof C);  // 输出: true

总结

所以,错误的根源是将 C 类本身误认为是实例对象,试图直接访问 a。而实际 aC 类实例的属性,必须通过实例对象(如 c.a)来访问。