typescript中,加入有一个函数是foo(store,key),如何编写类型定义,让key只能传递store里面的字段,并且值类型必须是string?
时间: 2023-03-31 13:04:46 浏览: 39
可以这样编写类型定义:
```
type Store = {
[key: string]: string;
}
function foo(store: Store, key: keyof Store): void {
// 函数体
}
```
其中,`Store` 是一个类型别名,表示一个对象,它的键是字符串类型,值是字符串类型。`keyof Store` 表示 `Store` 对象的所有键的联合类型,也就是说,`key` 参数只能传递 `Store` 对象中的键,而且值类型必须是字符串类型。
相关问题
在typescript中定义一个type类型别名有联合类型或交叉类型
在 TypeScript 中,我们可以使用 `type` 关键字来定义类型别名。如果要定义一个联合类型的别名,可以使用 `|` 符号连接多个类型,例如:
```typescript
type MyType = string | number | boolean;
```
这个别名 `MyType` 表示的是一个既可以是字符串、也可以是数字、还可以是布尔值的类型。
如果要定义一个交叉类型的别名,可以使用 `&` 符号连接多个类型,例如:
```typescript
type MyType = { foo: string } & { bar: number };
```
这个别名 `MyType` 表示的是一个既有 `foo` 属性且属性值为字符串、又有 `bar` 属性且属性值为数字的类型。
需要注意的是,联合类型和交叉类型的定义方式都只是一种语法糖,最终它们都会被 TypeScript 转化为对应的类型。
typescript 对象类型声明中 ,一个key 存在,另一个key 则可必须存在,
可以使用 TypeScript 中的交叉类型来实现这个需求,例如:
```
type RequiredKeys<T, K extends keyof T> = {
[P in K]-?: T[P];
};
type MyObject = {
foo: string;
bar?: number;
};
type MyRequiredObject = RequiredKeys<MyObject, 'foo'> & RequiredKeys<MyObject, 'bar'>;
```
这样定义的 `MyRequiredObject` 类型中,`foo` 和 `bar` 都是必须存在的属性。