gpt4 book ai didi

typescript - 将字符串转换为对象属性名称

转载 作者:行者123 更新时间:2023-12-02 19:55:52 25 4
gpt4 key购买 nike

我看到过一个类似的问题,关于 javascript 的这个问题。但是,我需要 typescript 中的答案,但我不知道该怎么做。 Convert string value to object property name

let madeObject = {};
const fieldName = 'title';
madeObject[fieldName] = 'hello';

此外,我正在尝试从 string[] 创建一个接口(interface),其中每个元素都是具有所需属性名称和值类型的字符串。 Use elements of an array to set the fields of a new object 。因此,我事先不知道我的属性是什么,因此我试图找到一种方法来创建具有给定属性的新界面。

最佳答案

这是因为 Typescript 将 madeObject 的类型推断为 {}(空对象)。只需给它一个更明确的类型

interface MyObject {
title:string;
}

let madeObject:Partial<MyObject> = {};
const fieldName:keyof MyObject = 'title';
madeObject[fieldName] = 'hello';

如果您知道一个对象将有键,但您不知道键的名称(可能因为它们仅在运行时才知道),那么您可以使用 typescript 动态键

interface MyObject {
// left side is the type of the key (usually string or symbol)
// right side is the type of the property (use "any" if you don't know)
[key:string]: string;
}

let madeObject:MyObject = {};
const fieldName:string = 'title';
madeObject[fieldName] = 'hello';

// Or you can make the interface Generic, if you have this situation a lot:

interface MyObjectGeneric <V = any, K = string> {
[key:K]: V;
}

let madeObject:MyObjectGeneric/* <string> */ = {}; // Adding <string> would narrow the return type down to string
const fieldName:string = 'title';
madeObject[fieldName] = 'hello';

解决这个问题的另一种方法是一起删除类型安全(不推荐这样做,并且会使 typescript 失去其用途)

let madeObject:any = {}; // declares that madeObject could be anything
const fieldName = 'title';
madeObject[fieldName] = 'hello';

// alternatively:

let madeObject2 = {}; // Type inferred as "{}"
(madeObject2 as any)[fieldName] = 'hello'; // Removes type safety only temporarily for this statement

关于typescript - 将字符串转换为对象属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com