在typescript中,自定义函数如何修改扩展类型的属性值
时间: 2024-02-06 15:04:38 浏览: 131
vue中typescript装饰器的使用方法超实用教程
在 TypeScript 中,可以通过参数定义和返回值来自定义函数以修改扩展类型的属性值。以下是一个示例:
```typescript
type ExtendedType = {
class: 'turn1' | '';
};
function modifyProperty<T extends ExtendedType, K extends keyof T>(obj: T, key: K, value: T[K]): T {
return {
...obj,
[key]: value
};
}
const attrs: ExtendedType = {
class: 'turn1'
};
const modifiedAttrs = modifyProperty(attrs, 'class', '');
console.log(modifiedAttrs); // 输出 { class: '' }
```
在上面的代码中,我们定义了一个泛型函数 `modifyProperty`,它接受三个参数:一个对象 `obj`、一个键 `key` 和一个新的属性值 `value`。我们使用 `T extends ExtendedType` 来约束泛型 `T`,确保它是 `ExtendedType` 或者它的子类型。然后,我们使用 `K extends keyof T` 来约束泛型 `K`,确保它是 `T` 的属性之一。
在函数体内部,我们使用对象解构语法 `{ ...obj, [key]: value }` 来创建一个新对象,其中 `[key]` 表示动态属性名,即根据传入的 `key` 参数来确定要修改的属性。最后,我们将新对象作为函数的返回值,将修改后的扩展类型返回给调用者。
在示例中,我们调用函数 `modifyProperty`,传入扩展类型的对象 `attrs`、属性名 `'class'` 和新的属性值 `''`,并将返回值打印到控制台上。可以看到,`modifiedAttrs` 对象的 `class` 属性已经被修改为 `''`。
阅读全文