typescript基础之satisfies 与 as const

satisfies 是 TypeScript 4.9 版本中引入的一个新的运算符,它可以让你检查一个给定的类型是否满足一个特定的接口或条件。换句话说,它可以确保一个类型具有一个特定接口所要求的所有属性和方法。它是一种保证一个变量符合一个类型定义的方式。

satisfies 运算符的语法是在一个值后面加上 satisfies,然后跟上一个类型的名称:

someValue satisfies SomeType;

satisfies 运算符有以下优点:

•  它可以让你在不改变值的原始类型的情况下,对值的类型进行验证和约束(与 : 注解不同)。

•  它可以让你保留值的最具体的类型信息,而不是将其扩展为更一般的类型(与默认类型推断不同)。

举个例子,假设我们有一个 Vibe 接口,它定义了一个 mood 属性,其类型为 "happy" | "sad"。我们可以用 satisfies 运算符来保证我们创建的 vibe 对象的 mood 属性只能是这两个字符串字面量之一,同时还能保持 mood 属性的具体值为 "happy"。

interface Vibe {
mood: "happy" | "sad";
}

const vibe = { mood: "happy" } satisfies Vibe;

vibe.mood; // "happy"

as const是TypeScript中的一个用于修饰符,它可以被用来修改类型推断的行为。当as const修饰符用在变量声明或表达式的类型上时,它会强制TypeScript将变量或表达式的类型视为不可变的(immutable)。这意味着:

•  变量或表达式的值不能被修改,否则会报错。例如,const foo = 1 as const; foo = 2;会报错,因为foo是不可变的。

•  变量或表达式的类型不能被扩展(widening),而是被缩小(narrowing)到最精确的类型。例如,const foo = 1 as const;的类型不是number,而是字面量类型1。这样可以避免一些潜在的错误,比如在switch语句中遗漏某些情况。

•  如果变量或表达式是一个对象或数组,那么它的所有属性和元素也都会被视为不可变的,并且它们的类型也会被缩小到最精确的类型。例如,const foo = { bar: 1, baz: "hello" } as const;的类型不是{ bar: number, baz: string },而是{ readonly bar: 1, readonly baz: "hello" }。

as cons修饰符通常用于以下几种场景:

•  定义一些常量,比如枚举值、配置项等,这样可以保证它们不会被修改,并且可以提供更精确的类型提示。

•  定义一些字面量类型,比如联合类型、元组类型等,这样可以避免类型扩展,并且可以进行網羅性检查(exhaustiveness check)。

•  定义一些不可变的对象或数组,比如React中的props、state等,这样可以提高性能,并且可以避免一些副作用。

你可能感兴趣的:(typescript,java,服务器)