TypeScript的satisfies关键字

前几天在看代码的时候,第一次遇到了 satisfies 关键字。

satisfies 会让编译器检查一个值是否满足指定类型(即能否被赋值给指定类型)。如果不满足,就会报错。举个例子:

1
2
3
4
5
6
7
8
9
10
11
type User = {
name: string;
};

const goodUser = {
name: "Tom",
} satisfies User; // ✅

const badUser = {
name: Math.random() < 0.5 ? "Tom" : null,
} satisfies User; // ❌ 编译报错

satisfies 和类型标注(利用 : 显式指定变量类型)比较像,但也存在细微差别。

1
2
3
4
5
6
type User = {
name: string;
};

const user1 = {} satisfies User; // ❌ 编译报错
const user2: User = {}; // ❌ 编译报错
1
2
3
4
5
6
7
8
9
type User = {
name?: string;
};

const user1 = {} satisfies User; // user1 的类型仍然是推断出来的 {}
const user2: User = {}; // user2 的类型是 User

user1.name; // ❌ 编译报错
user2.name; // ✅

satisfies 和类型标注都会检查当前值是否可以被赋值给指定类型。区别出现在类型检查通过之后,类型标注会覆盖 TypeScript 推断的类型,而 satisfies 不会。

另一个和 satisfies 有点接近的是 as

1
2
3
4
5
6
7
type User = {
name: string;
};

const user = {} as User;

user.name.toUpperCase(); // ❌ 编译通过,但运行时报错

as 会让编译器把当前值当作指定类型看待。

参考资料


TypeScript的satisfies关键字
https://tomzhu.site/2026/07/12/TypeScript的satisfies关键字/
作者
Tom Zhu
发布于
2026年7月12日
许可协议