【发布时间】:2018-01-04 20:17:41
【问题描述】:
我有一个使用泛型构建的数据结构。不过,当我去填充数据时,我想确保我可以将一些简单的格式转换为正确的类型。由于我们使用泛型配置的类,我似乎无法检测到其他代码中的数据类型。
这是从我的代码中提取的一个简单示例:
export class Field<T> {
private Name_: string;
private Value_: T;
constructor(FieldName:string, Data?:T) {
this.Name_ = FieldName;
if( Data !== undefined) {
this.Value_ = Data;
}
}
/**
* Get the data value from this class
* @returns T The value from Value_
*/
get Value(): T {
return this.Value_;
}
get Type(): string {
return typeof this.Value_;
}
/**
* Set the data into the data value
* @param Data T Generic Data member as the raw data to be stored in the field.
*/
set Value(Data:T) {
this.Value_ = Data;
}
}
这是一个简单的代码sn-p来演示这个问题。我的结构(字段)是用泛型(字段)定义的,我希望数据中的值属于该类型。
我正在尝试对此进行测试,但我无法从 Object 中获取类型(因为它是 Field 类型),所以我试图获取内部数据字段的类型。
describe('Get Type of Value', () => {
let TestField:Field<number> = new Field<number>('Age', 32);
it('should return the value type from the definition', () => {
expect(TestField.Type).toBe('number');
});
});
测试失败,表明类型 getter 函数返回未定义。
FAIL
Expected value to be (using Object.is):
"number"
Received:
"undefined"
【问题讨论】:
-
当我运行此代码 (
let TestField: Field<number>) 时,我收到一个 TypeScript 错误,即字符串不可分配给数字 -
抱歉,创建示例时出现编辑错误。我已将新更新为 Field
('Age', 32);所以它会通过 Typescript 编译器。
标签: typescript generics