Как предотвратить добавление свойств к пустому объекту в TypeScript? - PullRequest
1 голос
/ 20 апреля 2020

Проверка типа TypeScript, кажется, принимает следующий код. Это почему? Можно ли как-нибудь сделать это более строгим?

const foo: {} = {bar: 123}

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

любой объект может быть назначен на {}. Но часто, когда вы пытаетесь использовать его после того, как у вас не будет свойств типа:

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
0 голосов
/ 20 апреля 2020

Я решил проблему, определив тип как Record<any, never>.

const foo: Record<any,never> = {} // this works
const bar: Record<any,never> = {bar: 123} // this creates error as expected
0 голосов
/ 20 апреля 2020

Тип объекта довольно широк. Вполне допустимо, чтобы он был либо пустым, либо имел свойства.

Я бы рекомендовал использовать тип null вместо пустого объекта и тип или интерфейс, если вы хотите sh для проверки свойства объекта.

См. TypeScript игровая площадка

interface Foo {
    bar: number
}

var foo: Foo | null = null

foo = {
    bar: 123
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...