【发布时间】:2018-03-05 08:33:32
【问题描述】:
我在打字稿中有以下通用类
type UserId = number
type Primitive = string | number | boolean
class ColumnValue<T, S extends Primitive> {
constructor(public columnName: String, public value: S) { }
}
abstract class Column<T> {
constructor(public columnName: String) { }
public set<S extends Primitive>(value: T): ColumnValue<T, S> {
return new ColumnValue(this.columnName, this.getValue(value))
}
public abstract getValue<S extends Primitive>(value: T): S
}
let id = new class extends Column<UserId> {
constructor() { super("id") }
public getValue(value: UserId): number {
return value
}
}()
但我不知道为什么会出现此错误 类“(匿名类)”错误地扩展了基类“列”。 属性“getValue”的类型不兼容。 类型 '(value: number) => number' 不可分配给类型 '(value: number) => S'。 类型“数字”不可分配给类型“S”
【问题讨论】:
-
可能你必须以具体的方式定义 S。 S 扩展了布尔值,但它到底是什么?
-
@jaibatrik 我编辑了我的问题,也许现在更清楚了,我希望 ts 编译器推断 ColumnValue 类 中的值类型并确保它是 Primative 类型
标签: typescript typescript-generics