ts中获取interface的所有键名
时间: 2023-05-28 12:07:44 浏览: 601
可以使用`keyof`关键字来获取interface的所有键名。例如:
```typescript
interface Person {
name: string;
age: number;
gender: 'male' | 'female';
}
type PersonKeys = keyof Person;
// 等价于 type PersonKeys = 'name' | 'age' | 'gender'
function getProperty(obj: Person, key: PersonKeys) {
return obj[key];
}
const person: Person = {
name: 'Tom',
age: 18,
gender: 'male',
};
getProperty(person, 'name'); // 'Tom'
getProperty(person, 'age'); // 18
getProperty(person, 'gender'); // 'male'
```
在上面的例子中,我们使用`keyof`关键字定义了一个`PersonKeys`类型,它等价于`'name' | 'age' | 'gender'`。然后我们使用`PersonKeys`作为函数`getProperty`的第二个参数类型,来限制只能传入`Person`的键名作为参数。
这样就可以在`getProperty`函数中使用`key`参数来获取`obj`对象的对应属性值了。
相关问题
ts 获取每个value的类型
在TypeScript(简称TS)中,如果你想获取某个数组或对象中每个value的类型,可以使用泛型、联合类型或者类型断言。这里有一些例子:
1. 对于数组:
```typescript
type Values<T> = T extends any[] ? T[number] : never;
let numbers: number[] = [1, 2, 3];
type NumberArrayValues = Values<typeof numbers>; // 数组值的类型会推导为number
```
在这个例子中,`Values`是一个泛型函数,它返回的是输入数组类型的元素类型。
2. 对于对象:
```typescript
interface MyObject {
key1: string;
key2: number;
}
function getValueTypes(obj: MyObject): { [P in keyof MyObject]: typeof obj[P] } {
return { ...obj };
}
let myObj: MyObject = { key1: 'hello', key2: 42 };
type ObjValueType = ReturnType<typeof getValueTypes(myObj)>;
// 这将得到:{ key1: string; key2: number; }
```
这里的`getValueTypes`函数返回一个新对象,其键对应的值就是原对象中对应属性的类型。
taro+ts点击input框处理键盘高度变化事件,键盘展开和落下页面高度的变化
在 Taro + TypeScript 中监听键盘高度变化的事件,可以通过 Taro 的 `onKeyboardHeightChange` API来实现。具体的实现步骤如下:
1. 在页面的state中定义一个`keyboardHeight`变量,用于记录当前键盘的高度:
```
interface IState {
keyboardHeight: number;
}
class MyPage extends Component<{}, IState> {
constructor(props) {
super(props);
this.state = {
keyboardHeight: 0,
};
}
}
```
2. 在页面中的`componentDidMount`生命周期函数中,使用 Taro 的`onKeyboardHeightChange` API来监听键盘高度变化事件,并更新`keyboardHeight`变量的值:
```
componentDidMount() {
Taro.onKeyboardHeightChange((res) => {
console.log(res.height); // 输出键盘高度
this.setState({ keyboardHeight: res.height });
});
}
```
3. 在页面中的`render`函数中,根据`keyboardHeight`变量的值来动态设置页面的样式,以实现键盘展开和落下页面高度的变化:
```
render() {
const { keyboardHeight } = this.state;
const style = keyboardHeight ? { height: `calc(100vh - ${keyboardHeight}px)` } : {};
return (
<View className="container" style={style}>
<Input
className="input"
placeholder="请输入内容"
onFocus={() => console.log('input获取焦点')}
onBlur={() => console.log('input失去焦点')}
/>
</View>
);
}
```
这里的`style`变量用于设置页面的样式,当`keyboardHeight`不为0时,页面高度减去键盘高度,以保证页面内容不被键盘遮挡。当`keyboardHeight`为0时,页面高度等于100vh,即占据整个屏幕。
通过以上步骤,就可以实现在 Taro + TypeScript 中处理键盘高度变化事件,以及键盘展开和落下页面高度的变化了。
阅读全文