Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript-迁移JavaScript函数_Typescript - Fatal编程技术网

TypeScript-迁移JavaScript函数

TypeScript-迁移JavaScript函数,typescript,Typescript,我有一个JavaScript助手函数,可以删除对象的属性: removeProp(obj, prop) { const { [prop]: _, ...result } = obj; return result; } 打字稿版本: removeProp(obj: Object, prop: string): Object { // tslint:disable-next-line: no-shadowed-variable const { [prop]: _, ...resul

我有一个JavaScript助手函数,可以删除对象的属性:

removeProp(obj, prop) {
  const { [prop]: _, ...result } = obj;
  return result;
}
打字稿版本:

removeProp(obj: Object, prop: string): Object {
  // tslint:disable-next-line: no-shadowed-variable
  const { [prop]: _, ...result } = obj;
  return result;
}
1-我有一个lint错误:
类型“Object”没有对应于
[prop]
中类型“string”tslint的索引签名


2-如果
obj
是泛型(获取泛型类型的所有属性-删除的属性),如何使用正确的类型初始化
result
变量?

您需要使用泛型参数(让我们调用
T
)来表示对象的类型和第二个参数(我们称之为
K
)它应该是T的
keyof
。对于返回类型,您可以使用
ommit
,这将从给定类型中删除一个键(尽管严格来说,您可以将返回类型保留为空,并且可以正确推断)


我有两个lint错误
找不到name'Omit'
Rest类型只能从对象类型创建
。由于我使用的是TypeScript 3.1,我理解
Omit
错误,但不理解第二个错误error@MouadEnnaciri这两个错误都会发生,因为您在3.1中,最新版本是3.5,代码可以使用它提供向后兼容的版本,但无法使用spread删除属性。正确键入3.2中发生的泛型类型上的spread我理解,这是兼容v3.1的版本?@MouadEnnaciri i添加了3.1的版本。所有ts版本基本上都兼容,但它们也都有一些突破性的更改,可能需要升级在较新版本中,随着类型系统变得更加严格,会产生新的错误。虽然如果它编译,我希望它能像以前一样工作。我希望避免使用
delete
运算符,但我将问题标记为已解决,这是由于我的TS版本造成的限制。谢谢
function removeProp<T, K extends keyof T>(obj: T, prop: K): Omit<T, K> {
  const { [prop]: _, ...result } = obj;
  return result;
}

let o = removeProp({ a: 1, b: 2}, "b")


type Omit<T, K extends PropertyKey> = Pick<T, Exclude<keyof T, K>>
function removeProp<T, K extends keyof T>(obj: T, prop: K): Omit<T, K> {
  const result = Object.assign({}, obj);
  delete result[prop]
  return result;
}

let o = removeProp({ a: 1, b: 2}, "b");
console.log(o);