[英]Is it possible to refer self property type in TypeScript?
I want to make some logger like below code.我想制作一些像下面代码一样的记录器。
Is it possible to change unknown
type to specific
type?是否可以将unknown
类型更改为specific
类型?
type Poo = {
prop1: 1 | 2 | 3;
prop2: "a" | "b" | "c";
}
type Log<T> = {
prop: keyof T;
prev: unknown; // Todo
cur: unknown; // Todo
}
const pooLogger: Log<Poo>[] = [];
const log: Log<Poo> = {
prop: "prop1",
prev: "a", // This line must cause error message like "a" is not 1 | 2 | 3
cur: 1
}
pooLogger.push(log)
T[Log<T>["prop"]]
is 1 | 2 | 3 | "a" | "b" | "c"
T[Log<T>["prop"]]
为1 | 2 | 3 | "a" | "b" | "c"
1 | 2 | 3 | "a" | "b" | "c"
1 | 2 | 3 | "a" | "b" | "c"
. 1 | 2 | 3 | "a" | "b" | "c"
。
You can use a conditional type to distribute the union type of T
's properties:您可以使用条件类型来分配T
属性的联合类型:
type Log<T, P extends keyof T = keyof T> = P extends keyof T ?
{prop: P; prev: T[P]; cur: unknown;} :
never
Log<Poo>
will be {prop: 'prop1', prev: 1|2|3} | {prop: 'prop2', prev: 'a'|'b'|'c'}
Log<Poo>
将是{prop: 'prop1', prev: 1|2|3} | {prop: 'prop2', prev: 'a'|'b'|'c'}
{prop: 'prop1', prev: 1|2|3} | {prop: 'prop2', prev: 'a'|'b'|'c'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.