【发布时间】:2019-03-13 14:17:26
【问题描述】:
大家好,
我对@987654321@ 不太熟悉,但这是我想要实现的目标,我目前正在努力解决:
使用如下定义的函数createObject 创建一个对象。作为参数,您可以仅传入 Object 类型的参数。
它返回传入的参数,但由 type 和 detail 属性修改)。
这就是我到目前为止所做的。
function createObject<T extends object>(options: T): T {
if (!options.type) {
if (options.showDetail) {
options.type = 'text';
options.detail = 'Some detail';
} else {
options.type = 'simple';
options.detail = '';
}
}
return options
}
当我执行我的功能时:
const objectConfig = {
name: 'Steven',
age: 28,
}
const newObj = createObject(objectConfig);
在函数createObject、options.type, options.showDetail, options.detail 内部以红色突出显示。打字稿抱怨:
[第 4 行] 类型“T”上不存在属性“类型”。
[第 3 行] 类型“T”上不存在属性“showDetail”。
[第 5、8 行] 类型“T”上不存在属性“详细信息”。
此外,返回 Generic 不会返回修改后的参数,而只是返回输入参数。 IE。我不会得到关于 newObj 的 detail/type 属性的 Typescript 提示。
我的 IDE 只是给我年龄和名称属性的类型提示。正如预期的那样,因为我错误地只返回了输入参数。
如何获得合适的打字稿解决方案? 谢谢!
【问题讨论】:
-
您的泛型对象被用作一种类型,因此您必须扩展具有这些属性名称的类型:创建该接口并扩展它。其次,您的
objectConfig构造与您扩展的属性的类型不匹配。Some detail是一个字符串会导致您将age作为数字类型传递。
标签: javascript typescript