Typescript中是否提供键值对?

时间:2016-04-07 05:33:03

标签: typescript

打字稿中是否有键值对?如果是的话怎么做。任何人都可以提供示例示例链接。

13 个答案:

答案 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内置对象的兼容性:

您可以创建通用的KeyValuePair类型以实现可重用性:

type KeyValuePair<K extends string | number, V = unknown> = [K, V]
const kv: KeyValuePair<string, string> = ["key", "value"]

TS 4.0:命名元组

即将推出的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

Working playground example

答案 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)

KeyValue 接口存在于使用 typescript 的 angular 库中。 因此,如果您的项目是有角度的,您就可以使用这个通用接口。 或者,如果您没有在 angular 中使用 TS,您可以使用它的声明来获得一个不错的通用 KeyValue 接口。

enter image description here

export declare interface KeyValue<K, V> {
    key: K;
    value: V;
}