Ser*_*sky 6 typescript typescript-generics typescript-typings
我有这个代码部分,非常简单:
interface A {
z: string;
y: number;
}
let newA = <T, S extends keyof T>(key: S, value: T[S]): Partial<T> => {
return {[key]: value};
}
Run Code Online (Sandbox Code Playgroud)
我看到一条错误消息:
Type '{ [x: string]: T[S]; }' is not assignable to type 'Partial<T>'
我可以假设问题与 相关{},它总是映射key为string
但即使有明确的类型说那应该是string我没有结果
只有一种可行的解决方案是删除Partial<T>,但这不是一个好的解决方案
希望能从一些专家级的typescript人那里得到一些答案,他们可以描述该问题的机制,并得到这种情况的解决方案
笔记!该问题仅与一般情况有关。没有这个一切都会好起来的。
您不需要使用部分。具有计算键的对象总是被推断为{[prop:string]:any infered type}
您可以重载您的函数以避免此类行为:
type Json =
| null
| string
| number
| boolean
| Array<JSON>
| {
[prop: string]: Json
}
function record<Key extends PropertyKey, Value extends Json>(key: Key, value: Value): Record<Key, Value>
function record<Key extends PropertyKey, Value extends Json>(key: Key, value: Value) {
return { [key]: value };
}
const result = record('a', 42) // Record<"a", 42>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |