想问下typescript如何动态指定对象必定存在目标属性?

例如现在有个方法:
function fun<Key>(params: Params, key: Key) {

console.log(params.hasOwnProperty(key) === true);

}
需要传递一个对象参数:params、还有一个必定存在于params里的参数:key。
这么做是因为我想对传递来的对象的指定属性进行处理,但在执行之前并不知晓这个对象的属性名是什么,而是需要在调用方法时动态传递。
这样除了以下方式:
interface Params extends Object {

[index: string]: any

}
还有其他方法吗?

阅读 5.3k
3 个回答

第一个问题

const todo = <T, K extends keyof T>(params: T, key: K) => console.log(params[key]);

todo({ a: 1 }, "a");

第二个问题分两种情况

第一种 不同的tsconfig不同的生成目标,你需要手动指定,

  • 比如说create-react-app你需要配置tsconfig路径
  • vscode需要配置.vscode, 参考yarn berry
  • 用tsc编译同样也可以配置tsconfig

第二种 同一个项目同时存在多种tsconfig,typescript本身是支持的,但是工具链支持的情况并不好,比如fork-ts-checker-webpack-plugin就不支持,假如你一个项目需要同时编译WebWorker,就需要添加两次该plugin

还有另外的问题是。。。tsconfig.json文件是不同另外改名称或者放在不同路径里的么,由于我一个项目里有多个端的输出文件,所以想要配置成不同类型的,但好像不能这么搞?

function objHasKey<T = {}>(params: T, key: keyof T): boolean {

    return params.hasOwnProperty(key) === true
}

const params = {
    name: 'name'
}

// 输入键时会有智能提示
objHasKey(params, 'name')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题