Chr*_*ris 27 javascript typescript
我需要将接口属性映射到对象:
interface Activity {
id: string,
title: string,
body: string,
json: Object
}
Run Code Online (Sandbox Code Playgroud)
我目前这样做:
headers: Array<Object> = [
{ text: 'id', value: 'id' },
{ text: 'title', value: 'title' },
{ text: 'body', value: 'body' },
{ text: 'json', value: 'json' }
]
Run Code Online (Sandbox Code Playgroud)
这变得非常重复.我想要的是这样的:
headers: Array<Object> = Activity.keys.map(key => {
return { text: key, value: key }
})
Run Code Online (Sandbox Code Playgroud)
Nit*_*mer 15
你不能,接口仅用于编译时,因为javascript不支持它.
你能做的是:
const Activity = {
id: "",
title: "",
body: "",
json: {}
}
type Activity = typeof Activity;
const headers: Array<Object> = Object.keys(Activity).map(key => {
return { text: key, value: key }
});
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
如果您想保留界面功能,您可以执行以下操作,@Nitzan Tomer 是对的。接口是类型系统的一部分,因此它们仅在编译时相关,因为它们在转译代码中被省略。
class Activity {
public id: string = '';
public title: string = '';
public body: string = '' ;
public json: Object = {};
}
let activity = new Activity()
const headers: Array<Object> = Object.keys(activity).map(key => {
return { text: key, value: key }
});
console.log(JSON.stringify(headers))
Run Code Online (Sandbox Code Playgroud)
如果您可以在编译期间添加它,并且使用TypeScript> = 2.4.1,则可以尝试此处建议的方法。
基本上,您应该像基本的一样添加ts-transformer-keys依赖项,自定义转换器,并且可以列出如下属性:
import { keys } from 'ts-transformer-keys';
interface Props {
id: string;
name: string;
age: number;
}
const keysOfProps = keys<Props>();
console.log(keysOfProps); // ['id', 'name', 'age']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20522 次 |
| 最近记录: |