我有一个.ts文件,我想使用以下类型定义:
type MyType = {
status: "ACTIVE" | "INACTIVE"
}
当我将这种类型用于我直接设置值的变量时,一切都很好:
const myObj1: MyType = {
status: "ACTIVE"
}
但如果我使用一个变量来设置值,我会得到一个错误:
const data = {
status: "ACTIVE"
}
const myObj2: MyType = data
错误:
Type '{ status: string; }' is not assignable to type 'MyType'.
Types of property 'status' are incompatible.
Type 'string' is not assignable to type '"ACTIVE" | "INACTIVE"'.
你可以在这里试用
我尝试了不同的选项(比如这样(,但问题是我的类型是从Json Schema生成的,我无法编辑生成的文件。
这是因为data
中的status
被推断为string
,而MyType
期望它是"ACTIVE"
或"INACTIVE"
。您只需要使用as const
断言
type MyType = {
status: "ACTIVE" | "INACTIVE"
}
const myObj1: MyType = {
status: "ACTIVE"
}
const data = {
status: "ACTIVE"
} as const
const myObj2: MyType = data
或者您可以使用TS 4.9 中提供的新satisfies
关键字
type MyType = {
status: "ACTIVE" | "INACTIVE"
}
const myObj1: MyType = {
status: "ACTIVE"
}
const data = {
status: "ACTIVE"
} satisfies MyType
游乐场