【发布时间】:2022-12-14 23:37:07
【问题描述】:
在最新的 TypeScript 版本中,是否可以将对象文字作为参数传递给函数而不扩展它,并且在调用中也不使用 as const?
TS游乐场链接:Example
我目前所做的是:
function func<T>(value: T): T {
return value;
};
let test = func({ key: 'value' })
// type inferred as { key: string;}
我想要的是以下内容
// ... alternative declaration of func
let test = func({ key: 'value' })
// type inferred as { key: "value"; }
更准确地说,它应该适用于任何扩展 Record<string,string> 的对象文字
这些存档我想要的结果,但我不想改变必须调用函数的方式
function func<T>(value: T): T {
return value
};
let test = func({ key: 'value' as const })
// type inferred as { key: "value"; }
let test = func({ key: 'value' } as const )
// type inferred as { readonly key: "value"; }
这可能吗?
【问题讨论】:
-
github.com/Microsoft/TypeScript/pull/10676 似乎在谈论这个:“为对象文字中的属性推断的类型是表达式的扩展文字类型,除非该属性具有包含文字类型的上下文类型。”但是我不太明白在我的情况下如何使“上下文类型包括文字类型”,或者这到底意味着什么
标签: typescript generics arguments type-inference object-literal