microsoft / microsoft/TypeScript
Different behavior when declare property or method in a class about covariance
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
TypeScript Version: 4.1.2
Search Terms: In ts doc - type compatibility, it seems like not mentioned about this.
Code
class M1 {
c: number = 1;
}
export class M2 extends M1 {
a: number = 1;
}
type Func<M extends M1> = (m: M) => number;
interface IFunc<M extends M1> {
func1?: Func<M>,
func2: Func<M>,
}
class R1<M extends M1 = M1> implements IFunc<M> {
// when delete this property, it will be no error.
public func1 = (m: M) => {
return m.c
}
public func2(m: M) {
return m.c
};
}
type IRConstructor<M extends M1, R extends R1<M>> = new () => R;
export class R2 extends R1<M2> {
}
type A = IRConstructor<M1, R1>;
let a1: A = R2; // error: Type 'typeof R2' is not assignable to type 'IRConstructor<M1, R1<M1>>'.
console.log(a1);
Expected behavior:
Should declare a property or a method in class has same behavior? I'm not sure...
Actually I want to know how can I make these code without error when I have to use functional property.
Actual behavior:
When you just decalre a method which is compatible with IFunc<M1>, it will be fine. But when you declare a functional property which is compatible with IFunc<M1>, it will be an error.
Playground Link:
Or, you can see playground
Related Issues:
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la reproducción en TypeScript Playground enlazada y con la sección del manual «Type Compatibility» mencionada en el issue. Compara el comportamiento reportado de la clase genérica para las formas de propiedad funcional y de método, y determina después si la diferencia es intencional; el trabajo estará terminado cuando se haya establecido un comportamiento esperado y exista la cobertura correspondiente en el compilador o en la documentación.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100