if
хватит: Песочницаexport interface PostAttach {
type: "video"|"audio",
attach: AttachVideo|AttachAudio
}
type
и attach
. Для него это два никак не связанных поля. Он предполагает, что возможны любые комбинации "video"|"audio"
и AttachVideo|AttachAudio
и тот факт что type = 'video'
ничего не говорит про тип attach
. Совместимость типов в TypeScript основывается на структурной типизации. Структурная типизация — это способ выявления отношений типов на основании исключительно состава их членов. Этот подход отличается от номинативной типизации. Посмотрим на следующий код:
interface Named { name: string; } class Person { name: string; } let p: Named; // Все подходит, поскольку используется структурная система типов p = new Person();
TableSelection
(один класс не должен напрямую зависеть от другого, так как это сложнее поддерживать). interface Cell {
addClass(cssClass: string) : void
removeClass(cssClass: string) : void
}
class TableSelection {
...
group
это массив чего-угодно что соответствует интерфейсу Cell
interface Cell {
addClass(cssClass: string) : void
removeClass(cssClass: string) : void
}
class TableSelection {
static selectedClass: string = 'selected'
group: Cell[]
constructor() {
this.group = []
}
select($cell: Cell) {
this.clear()
this.group.push($cell)
$cell.addClass(TableSelection.selectedClass)
}
clear() {
this.group.forEach(($selectedCell) => $selectedCell.removeClass(TableSelection.selectedClass))
this.group = []
}
}
one
как объект с двумя обязательными полями: items
и item
two
как объект с двумя обязательными полями: select
и data
one
или типtwo
. Либо то либо то. ". А описываете функцию которая возвращает ни то ни другое.function g(): Pick<one, 'items'> & Pick<two, 'select'> {
}
id
. Он только знает что там какая-то строка. А поскольку id
может быть любой строкой, то и значение ITEMS[0][id]
тоже может быть чем угодно.interface IFilters {
id: keyof IItems; // <-- "id" | "filter1" | "filter2"
title: string;
}
getSome() {
return this.http.get('/some')
}
second() {
if (this.isEmpty(this.AllMaterial)) {
this.getSome().subscribe( (data: Array<object>)=> {
console.log(data)
this.AllMaterial = data; // не делает запрос
console.log(this.AllMaterial)
}, err => {
console.log(err)
})
}
}