gpt4 book ai didi

javascript - 在 typescript 中将对象传递给.map

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:41 25 4
gpt4 key购买 nike

下面是我的静态成员配置类。

import {Injectable} from '@angular/core';
import {Config} from '../shared/interfaces'

export class GlobalData {

static config:Config = {
appName: "",
line: "",
}

constructor(private app:PApplication){
GlobalData.config.appName = app.getData().Style? 'P_APP' : 'P_WEB'
GlobalData.config.line = 'PApp'
}

}

下面是我的界面配置

export interface Config {
appName: string
line: string
}

我正在尝试将我的静态配置对象传递给以下函数:

var appConfig = this.appConfig(GlobalData.config);

appConfig = (configVariable: Config) => {
return _.map(configVariable, function(val, key) {
return key + "=" + val;
}).join("&");
}

我收到以下错误:

[ts] Argument of type 'Config' is not assignable to parameter of type 'List<{}> | Dictionary<{}> | NumericDictionary<{}>'. Type 'Config' is not assignable to type 'NumericDictionary<{}>'. Index signature is missing in type 'Config'.

基本上在 Javascript 中,配置是一个 全局对象,可以在任何 controller/services 中访问。

var config = {appName: "", line: "" }

最佳答案

map function are 的定义:

map<T, TResult>(
list: _.List<T>,
iterator: _.ListIterator<T, TResult> | _.IterateePropertyShorthand | _.IterateeMatcherShorthand<any>,
context?: any): TResult[];

map<T, TResult>(
object: _.Dictionary<T>,
iterator: _.ObjectIterator<T, TResult>,
context?: any): TResult[];

如您所见,传递的对象应该是类型 _.List<T>_.Dictionary<T> .
在您的情况下,它需要是 _.Dictionary<T> , 定义如下:

interface Dictionary<T> extends Collection<T> {
[index: string]: T;
}

你的 Config接口(interface)没有索引签名,这就是编译器提示的原因。 要解决这个问题,只需将其转换为 any :

return _.map(configVariable as any, function(val, key) {
return key + "=" + val;
}).join("&");

编辑

map 的签名在 lodash 中是相似的:

map<T, TResult>(
collection: List<T>,
iteratee?: ListIterator<T, TResult>
): TResult[];

map<T extends {}, TResult>(
collection: Dictionary<T>,
iteratee?: DictionaryIterator<T, TResult>
): TResult[];

map<T extends {}, TResult>(
collection: NumericDictionary<T>,
iteratee?: NumericDictionaryIterator<T, TResult>
): TResult[];

map<T, TResult>(
collection: List<T>|Dictionary<T>|NumericDictionary<T>,
iteratee?: string
): TResult[];

map<T, TObject extends {}>(
collection: List<T>|Dictionary<T>|NumericDictionary<T>,
iteratee?: TObject
): boolean[];

Dictionary有点不同:

interface Dictionary<T> {
[index: string]: T;
}

原来是同样的问题。
至于避免使用 any ,你可以这样做:

interface Config extends _.Dictionary<string> {
appName: string
line: string
}

然后是:

return _.map(configVariable, function(val, key) {
return key + "=" + val;
}).join("&");

将编译没有错误。

关于javascript - 在 typescript 中将对象传递给.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443957/

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