Как определить общий тип ‘имеет свойство’ constrint без определения типа?

#typescript #typescript4.0

#typescript #typescript4.0

Вопрос:

Предположим, нам нужно реализовать следующее:

 export class Class1<T> {
    public constructor(param1: T) {
        param1.prop1 = 1; // TS error: T doesn't have property 'prop1'
    } 
}
 

Учитывая, что мы не можем наследовать все возможные param1 от одного базового interface `класса`, как ограничить T ?

Я пробовал T extends { prop1: number } , но это неправильный синтаксис для TS.

Комментарии:

1. Это действительно допустимо: export class Class1<T extends { prop1: number }> {

2. @zerkms Вы правы. Кажется, у меня возникли некоторые проблемы со встроенной проверкой ошибок VS Code.

Ответ №1:

Решение, которое я дал в вопросе, является правильным:

 export class Class1<T extends { prop1: number }> {
    public constructor(param1: T) {
        param1.prop1 = 1; // No TS error now
    } 
}
 

Кажется, у меня возникли некоторые проблемы со встроенной проверкой ошибок VS Code.