Skip to content

编译器、注解与推导 ​

TypeScript 先检查源码,再由编译器生成 JavaScript。它不会在浏览器中替你验证用户输入,因此“编译通过”和“运行安全”是两个不同结论。

先观察推导结果 ​

ts
const count = 1;
let message = 'ready';
const labels = ['todo', 'done'];

message = 'running';
labels.push('blocked');

const count 的值和类型都不能重新赋值;let message 被推导为 string,数组被推导为 string[]。注解应表达边界或意图,而不是把每个明显的局部变量都写一遍。

编译检查不等于运行时校验 ​

ts
type User = { id: string; name: string };

function greeting(user: User) {
  return `Hello ${user.name}`;
}

const raw: unknown = JSON.parse('{"id":"u1","name":"Ada"}');
// greeting(raw); // unknown 不能直接当 User 使用

unknown 要求代码先证明结构,再调用业务函数;any 会跳过这道门。来自网络、文件和本地存储的数据默认都应当视为未知。

练习 ​

把 parseUser 写成返回 unknown 的函数,并在调用 greeting 前检查 id 和 name 都是字符串。输入 { "id": 1 } 时必须拒绝,不能返回半成品用户。

用心记录每一步成长