bar*_*ise 4 javascript strong-typing typescript
我正在构建一个需要一次更新对象的一个字段的函数。该对象是通过接口定义的T。
interface T {
a: TypeA;
b: TypeB;
c: TypeC;
}
Run Code Online (Sandbox Code Playgroud)
这应该是该函数的类型签名:
(key: keyof T, value: typeof T[key]) => void
Run Code Online (Sandbox Code Playgroud)
这会生成错误:'key' refers to a value, but it is being used as a type here. Did you mean 'typeof key'?。IMO 我的意思不是typeof key,因为typeof key可以是 的任何键T,但我希望value属性的类型为TypeAifkey = a等。
如何选择对应键值的类型T?
Mir*_* S. 11
您正在尝试使用实际值对类型进行索引,这是不允许的。您需要使用类型(playground)来访问它:
interface T {
a: number;
b: string;
c: boolean;
}
const func = <K extends keyof T>(key: K, value: T[K]) => {};
func("a", 5);
func("b", 5); // Argument of type 'number' is not assignable to parameter of type 'string'.
Run Code Online (Sandbox Code Playgroud)
打字稿中的类型和实际值之间有明显的区别,因为类型信息在转译后会丢失。因此,您不能使用实际值来定义类型逻辑。唯一的方法是提取实值的类型值(例如,使用typeof),这就是编译器建议将实值转换为类型的原因。
| 归档时间: |
|
| 查看次数: |
7401 次 |
| 最近记录: |