Size: a a a

2018 June 15

AE

Artur Eshenbrener in TypeScript
Работает только начиная с неправославного надругательства над tuple https://github.com/Microsoft/TypeScript/pull/24897
источник

MS

Max Sysoev in TypeScript
Аа, кортеж. Слепой, сорян. ща читну, спасибо
источник

George Сarpow in TypeScript
Привет! Как в интерфейсе сделать что-то такое: interface A<K<T>> {} - чтобы получить доступ к параметру-дженерику и его параметру?
источник

AE

Artur Eshenbrener in TypeScript
George Сarpow
Привет! Как в интерфейсе сделать что-то такое: interface A<K<T>> {} - чтобы получить доступ к параметру-дженерику и его параметру?
кажется никак
источник

AE

Artur Eshenbrener in TypeScript
https://github.com/Microsoft/TypeScript/issues/1213

Вот вроде ишшью на эту тему
источник

George Сarpow in TypeScript
Печаль :(
источник

A

Alexander in TypeScript
Господа, а есть в TS *правильный* способ пихать классы в генерики?

Вот, например:
class MyType {
   constructor() {...}
}

class MyAdvancedType extends MyType {
   constructor() {...}
}

class WorkerWithTypes<T extends MyType> {
   constructor() {
       let instance = new T(); // И ВОТ ТУТ ОШИБКА: 'T' only refers to a type, but is being used as a value here.
   }
}

Что я делаю не так? Почему внутри класса-генерика я не могу создать тот самый генерик, если я объявил, что он наследуется от заявленного типа? И как такое делать правильно?
источник

к

кана in TypeScript
Alexander
Господа, а есть в TS *правильный* способ пихать классы в генерики?

Вот, например:
class MyType {
   constructor() {...}
}

class MyAdvancedType extends MyType {
   constructor() {...}
}

class WorkerWithTypes<T extends MyType> {
   constructor() {
       let instance = new T(); // И ВОТ ТУТ ОШИБКА: 'T' only refers to a type, but is being used as a value here.
   }
}

Что я делаю не так? Почему внутри класса-генерика я не могу создать тот самый генерик, если я объявил, что он наследуется от заявленного типа? И как такое делать правильно?
"почему": у тебя два мира термов, которые отделены друг от друга
источник

к

кана in TypeScript
типы и значения
источник

к

кана in TypeScript
ты не можешь их смешивать. Ты же не можешь сделать const x = number.
источник

A

Alexander in TypeScript
я понимаю. Но какого фига я не могу сделать new T(), если я въявную указал, что T -- это таки тип? ну да, понятно: потому, что формально new T -- это вызов значения. Почему компилятор жалуется -- понятно. Как подобное делать?
источник

AK

Aleh Kashnikau in TypeScript
Alexander
Господа, а есть в TS *правильный* способ пихать классы в генерики?

Вот, например:
class MyType {
   constructor() {...}
}

class MyAdvancedType extends MyType {
   constructor() {...}
}

class WorkerWithTypes<T extends MyType> {
   constructor() {
       let instance = new T(); // И ВОТ ТУТ ОШИБКА: 'T' only refers to a type, but is being used as a value here.
   }
}

Что я делаю не так? Почему внутри класса-генерика я не могу создать тот самый генерик, если я объявил, что он наследуется от заявленного типа? И как такое делать правильно?
Никак, ты можешь явно передавать класс в конструктор например

constructor(C: ClassOf<T>) {
 const a = new C
}
источник

к

кана in TypeScript
Alexander
я понимаю. Но какого фига я не могу сделать new T(), если я въявную указал, что T -- это таки тип? ну да, понятно: потому, что формально new T -- это вызов значения. Почему компилятор жалуется -- понятно. Как подобное делать?
не понимаешь. T у тебя живет в мире типов. Ты не можешь его спустить в мир термов
источник

A

Alexander in TypeScript
Aleh Kashnikau
Никак, ты можешь явно передавать класс в конструктор например

constructor(C: ClassOf<T>) {
 const a = new C
}
ясно. жаль. спасибо.
источник

к

кана in TypeScript
с классами то же самое
источник

к

кана in TypeScript
class X { }
источник

🦉⁣

🦉 ⁣ in TypeScript
Alexander
Господа, а есть в TS *правильный* способ пихать классы в генерики?

Вот, например:
class MyType {
   constructor() {...}
}

class MyAdvancedType extends MyType {
   constructor() {...}
}

class WorkerWithTypes<T extends MyType> {
   constructor() {
       let instance = new T(); // И ВОТ ТУТ ОШИБКА: 'T' only refers to a type, but is being used as a value here.
   }
}

Что я делаю не так? Почему внутри класса-генерика я не могу создать тот самый генерик, если я объявил, что он наследуется от заявленного типа? И как такое делать правильно?
так T это тип
источник

к

кана in TypeScript
тут создается две сущности
источник

к

кана in TypeScript
X - тип, он живет только на типах
X-функция, которая при new создает объект там
источник

к

кана in TypeScript
они имеют одинаковое имя, но живут в разных мирах, один на уровне значений (поэтому можем его вызвать), другой на уровне типов (поэтому мы можем указывать тип значений, созданных конструктором)
источник