我尝试创建一个具有变量值的类型作为属性
例如:
AndroidRuntime: Calling main entry com.android.commands.pm.Pm
11-19 00:37:50.867 7887 7887 E Pm : Error
11-19 00:37:50.867 7887 7887 E Pm : java.lang.NullPointerException
11-19 00:37:50.867 7887 7887 E Pm : at android.os.Parcel.readException(Parcel.java:1690)
11-19 00:37:50.867 7887 7887 E Pm : at android.os.Parcel.readException(Parcel.java:1637)
11-19 00:37:50.867 7887 7887 E Pm : at android.content.pm.IPackageInstaller$Stub$Proxy.createSession(IPackageInstaller.java:249)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.commands.pm.Pm.doCreateSession(Pm.java:552)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.commands.pm.Pm.runInstall(Pm.java:392)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.commands.pm.Pm.run(Pm.java:142)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.commands.pm.Pm.main(Pm.java:99)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
11-19 00:37:50.867 7887 7887 E Pm : at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:277)
11-19 00:37:50.869 7887 7887 I art : System.exit called, status: 1
我希望我能做到:
const myProp: string = 'my prop';
type Foo ={
[myProp]: string
};
但得到错误:
[ts]类型文字中的计算属性名称必须直接引用 一个内置的符号。
答案 0 :(得分:2)
如果要声明一个与字符串常量具有相同属性名称的类型,可以使用以下语法(查找类型语法)
const myProp = 'my prop';
type Foo = {
[P in typeof myProp]: string
};
const test: Foo = {
[myProp]: myProp
}
如果您想拥有其中几个键,可以使用联合类型:
const myProp = 'my prop';
const otherProp = "otherProp"
type Foo = {
[P in (typeof myProp | typeof otherProp)]: string
};
const test: Foo = {
[myProp]: myProp,
[otherProp]: otherProp
}
typescript默认库实际上提供了一个类似于上述查找类型声明的类型,名为Record
。使用此功能,您可以将类型写为:
type Foo2 = Record<typeof myProp, string>;
答案 1 :(得分:1)
下一版本的Typescript发布后,您就可以执行此操作。
此feature已在typescript @ next中提供。如果您愿意,可以使用以下方式安装:
npm install typescript@next --save-dev
同时你可以使用@Titian Cernicova-Dragomir提供的方法