打字稿中是否有键值对?如果是的话怎么做。任何人都可以提供示例示例链接。
答案 0 :(得分:59)
Typescript中是否提供键值对?
是。被称为an index signature:
interface Foo {
[key: string]: Bar;
}
let foo:Foo = {};
此处的密钥为string
,值为Bar
。
您可以将es6 Map
用于正确的词典polyfilled by core-js
。
答案 1 :(得分:41)
最简单的方法是:
var indexedArray: {[key: string]: number}
答案 2 :(得分:9)
不是提问者,而是所有其他感兴趣的人: 请参阅:How to define Typescript Map of key value pair. where key is a number and value is an array of objects
因此解决方案是:
IllegalAccessException
干杯!
答案 3 :(得分:8)
Typescript中是否提供键值对?
如果你想到一个C#KeyValuePair<string, string>:不,但你可以自己轻松定义一个:
interface KeyValuePair {
key: string;
value: string;
}
用法:
let foo: KeyValuePair = { key: "k", value: "val" };
答案 4 :(得分:3)
另一种简单的方法是使用tuple:
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10];
// Access elements
console.log("First: " + x["0"] + " Second: " + x["1"]);
输出:
第一:你好第二:10
答案 5 :(得分:3)
键值对的示例是:
[key: string]: string
您可以将任何内容作为值-如果您以编程方式填充了类型不同的值,则可以输入:
[key: string]: any
尽管可以自行决定使用any
:)
答案 6 :(得分:2)
您还可以考虑使用Record
,如下所示:
const someArray: Record<string, string>[] = [
{'first': 'one'},
{'second': 'two'}
];
或者写这样的东西:
const someArray: {key: string, value: string}[] = [
{key: 'first', value: 'one'},
{key: 'second', value: 'two'}
];
答案 7 :(得分:1)
就像杰克·米勒(Jack Miller)所说的那样,您不必创建接口,可以将其创建为任意接口:
let keyValues: any = [
{ key: "2013 Volkswagen Polo 1.4", value: "" },
{ key: "Monthly installment", value: "R2,000.00" },
{ key: "Paid over", value: "72 Months" },
{ key: "Deposit amount", value: "R60,000.00" }
];
答案 8 :(得分:1)
一种简洁的方法是将tuple用作key-value pair:
const keyVal: [string, string] = ["key", "value"] // explicit type
// or
const keyVal2 = ["key", "value"] as const // inferred type with const assertion
[key, value]
元组还确保与JS内置对象的兼容性:
Object
,尤其是Object.entries
,Object.fromEntries
Map
,尤其是Map.prototype.entries
和new Map()
构造函数Set
,尤其是Set.prototype.entries
您可以创建通用的KeyValuePair
类型以实现可重用性:
type KeyValuePair<K extends string | number, V = unknown> = [K, V]
const kv: KeyValuePair<string, string> = ["key", "value"]
即将推出的TS 4.0提供了named/labeled tuples,以提供更好的文档和工具支持:
type KeyValuePairNamed = [key: string, value: string] // add `key` and `value` labels
const [key, val]: KeyValuePairNamed = ["key", "val"] // array destructuring for convenience
答案 9 :(得分:0)
class Pair<T1, T2> {
private key: T1;
private value: T2;
constructor(key: T1, value: T2) {
this.key = key;
this.value = value;
}
getKey() {
return this.key;
}
getValue() {
return this.value;
}
}
const myPair = new Pair<string, number>('test', 123);
console.log(myPair.getKey(), myPair.getValue());
答案 10 :(得分:0)
如果您尝试使用以下示例
示例:{ 值1:“值1” }
并根据某些条件动态添加conditionalData,试试
let dataToWrite: any = {value1: "value1"};
if(conditionalData)
dataToWrite["conditionalData"] = conditionalData
答案 11 :(得分:0)
TypeScript 有 Map。你可以使用像:
public myMap = new Map<K,V>([
[k1, v1],
[k2, v2]
]);
myMap.get(key); // returns value
myMap.set(key, value); // import a new data
myMap.has(key); // check data
答案 12 :(得分:0)