ts中satisfies跟as const一起使用
时间: 2024-11-27 18:12:10 浏览: 27
在TypeScript (TS) 中,`satisfies` 和 `as const` 是两个不同的关键字,但它们可以一起用于创建更严格的类型检查。
1. **satisfies**: 这个关键字通常与 `~0` 或者 `^x.y.z` 配合使用,用于指定版本范围。当你在类型声明中使用 `satisfies`,比如 `semver.SemVer` 类型,你可以限制变量或类型的值必须满足特定的版本约束,如 `v1.x.x || v2.x.x`.
```typescript
type MyDependencyVersion = semver.SemVer | semver.SemVer['validated'] // 指定有效版本
const myDependency: MyDependencyVersion satisfies '^1.2.3' = '1.3.4'; // 正确,因为1.3.4在1.x.x范围内
```
2. **as const**: 这个关键字用于声明常量数组或枚举类型,表示该值是不可变的。当你将一个表达式放在 `as const` 后面,TypeScript 将不会尝试对其进行更改,而是将其视为只读。
```typescript
const daysOfWeek: readonly ('Monday' | 'Tuesday' | ... ) as const = ['Monday', 'Tuesday', 'Wednesday'];
```
在这种场景下,`satisfies` 可能用于对 `daysOfWeek` 的元素类型进行版本依赖的约束。
结合起来,如果有一个依赖库的版本需要固定在某个范围内,并且这个版本列表作为常量存储,你可能会这样做:
```typescript
type DependencyVersion = semver.SemVer | semver.SemVer['validated'];
const allowedVersions: readonly DependencyVersion[] as const = [ '^1.2.3', '^2.4.5' ];
let myDependency: DependencyVersion as const = allowedVersions[0]; // 确保myDependency的值在允许的范围内
```
阅读全文
相关推荐


















