[英]Typescript assign value for keyof not working
I have a problem:我有个问题:
- I do not assign for value of variable temp as code below - 我没有为变量temp 的值赋值如下代码
Please, how to assign value to variable temp请问,如何为变量temp赋值
Following code below:以下代码如下:
interface Base {
a: number;
b: number;
c: string;
}
interface Child extends Base {
d: string;
}
const data: Child = {
a: 1,
b: 2,
c: "1",
d: "2"
}
function check<T extends Base>(obj: T, key: string) {
const keys: any[] = Object.keys(obj);
type dataTypes = keyof T;
for (let m in keys) {
// error:
// Type 'string' is not assignable to type 'keyof T'.
// Type 'string' is not assignable to type '"a" | "b" | "c"
const temp: dataTypes = m; //error
}
}
function test(data: Base) {
check(data, "d")
}
Object.keys(obj)
returns string[]
, that's why m
is a string, but dataTypes
is "a" | "b" | "c"
Object.keys(obj)
返回string[]
,这就是为什么m
是字符串,而dataTypes
是"a" | "b" | "c"
"a" | "b" | "c"
"a" | "b" | "c"
( union type ), ie more restrictive. "a" | "b" | "c"
( 联合类型),即更具限制性。 So you can't assign a string to a variable of type "a" | "b" | "c"
所以你不能将字符串分配给类型为
"a" | "b" | "c"
的变量"a" | "b" | "c"
"a" | "b" | "c"
"a" | "b" | "c"
. "a" | "b" | "c"
。
The solution is simple: don't use Object.keys(obj)
:解决方案很简单:不要使用
Object.keys(obj)
:
function check<T extends Base>(obj: T, key: string) {
type dataTypes = keyof T;
for (let m in obj) {
const temp: dataTypes = m;
}
}
Replace for (let m in keys) {
by for (var i=0; i< keys.length; i++) {
替换
for (let m in keys) {
by for (var i=0; i< keys.length; i++) {
for (var i=0; i< keys.length; i++) {
const temp: dataTypes = keys[i]; //no error
}
用:
const temp = m as keyof T;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.