在TypeScript中如何防止属性被添加到一个空对象中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在TypeScript中如何防止属性被添加到一个空对象中?相关的知识,希望对你有一定的参考价值。
TypeScript类型检查器似乎接受以下代码。为什么会这样?我可以以某种方式使它更严格吗?
const foo: {} = {bar: 123}
答案
const foo: { [index: string]: never } = {} // no error
const bar: {[index : string]: never } = {a:1} // error
另一答案
任何对象都可以作为{}的符号。但通常情况下,当你尝试使用它后,你将没有来自类型的属性。
const foo: {} = {bar: 123}
foo.bar // error : Property 'bar' does not exist on type '{}'
你应该先定义一个类型,或者在你的声明中推断类型。
// with a type (an interface would also work)
type Foo = {
bar: number;
}
const foo: Foo = {bar: 123};
foo.bar // type: number
// with inference :
const foo = {bar: 123};
foo.bar // type: number
另一答案
类型 对象 类型是相当广泛的。它既可以是空的,也可以是有属性的,这是完全有效的。
我建议使用 无效 类型代替空对象,如果您希望验证对象属性,则用类型或接口代替。
interface Foo {
bar: number
}
var foo: Foo | null = null
foo = {
bar: 123
}
另一答案
我解决了这个问题,将类型定义为 Record<any, never>
.
const foo: Record<any,never> = {} // this works
const bar: Record<any,never> = {bar: 123} // this creates error as expected
以上是关于在TypeScript中如何防止属性被添加到一个空对象中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用jsdom和typescript防止“属性'...'在'Global'类型上不存在”?
如何将样式化组件作为属性添加到 TypeScript 中的另一个样式化组件?