覆盖函数参数-打字稿

时间:2020-05-13 14:22:22

标签: javascript reactjs typescript

我有以下 config.tsx 文件-

const AuthConfig = {
    base_uri: 'https://google.com',
    info: {
        country: 'Norway',
        continent: 'Europe',
    }
};
export default AuthConfig;

我正在将该配置文件的内容作为参数传递给其他功能调用 config.tsx 文件之外。

import config from './config'

myFunction(config)

问题-是否可以在调用函数时覆盖来自配置文件的值(例如“大陆”)?

3 个答案:

答案 0 :(得分:0)

是的,您可以使用传播算子或Object.assign

 myFunction({...config, info: {...config.info, continent: 'America'}})

myFunction(Object.assign(config, {info: Object.assign(config.info, {continent: 'America'})})) 

答案 1 :(得分:0)

是的,您可以将config强制转换为any类型,然后可以像以下这样更新continent的值:

import config from './config'

(<any>config).continent = "AnotherOne";

// This is for debugging purpose
console.log( config )

myFunction(config);

如果我们不将config强制转换为任何一个,我们将收到类似以下的错误:

类型'{base_uri:string;信息:{country:string;大陆:字符串; }; }'。

答案 2 :(得分:0)

如果要更改的只是值,而不更改属性。传播物体

const AuthConfig = {
    base_uri: 'https://google.com',
    info: {
        country: 'Norway',
        continent: 'Europe',
    }
};
export default AuthConfig;

const toSend = {
   ...AuthService,
   info: { ...AuthService.info, continent: "Some Else" }
}

myFunc(toSend);

但是如果相反,您想更改对象结构。 TypeScript会哭。 因此,您需要创建一个ObjectLiteral类型

export interface ObjectLiteral {
  [x: string]: any;
}