Как прекратить отправку push-уведомлений после того, как пользователь очистит данные своего локального браузера?

Если вы действительно хотите иметь эту ошибку, вы можете объявить Example как интерфейс, а не тип пересечения. Так как 2.2 , интерфейс может расширять тип объекта (или даже тип пересечения)

type ExampleA = {
    a: string;
}

type ExampleB = {
    b: number;
}

type ExampleC = {
    c: boolean;
}

interface Examples extends ExampleA, ExampleB, ExampleC {

}

function foo(pattern: { [key: string]: string }) {
    console.log(pattern);
}

const bar: Examples = { a: 'foo', b: 1, c: false }; 

foo(bar); // error

Или даже таким образом, чтобы лучше проиллюстрировать разницу между интерфейсом и типами пересечений:

type Examples = ExampleA & // the same as in question
    ExampleB &
    ExampleC;

interface IExamples extends Examples { // empty interface "collapses" the intersection 
}

const bar1: Examples = { a: 'foo', b: 1, c: false };  
foo(bar1); // no error

const bar2: IExamples = { a: 'foo', b: 1, c: false };  
foo(bar2); // error

Еще один способ построения типа объекта из пересечения, как предложил Тициан в комментарии, - использовать сопоставленный тип, который почти, но не совсем идентичен его общему параметру:

type Id = { [P in keyof T]: T[P] } 

const bar3: Id = { a: 'foo', b: 1, c: false };

foo(bar3); // error

0
задан jlblca9l_kpblca 19 January 2019 в 14:56
поделиться