Javascript typescript中的条件类型能否依赖于自身的值?
我可以在typescript中实现这样的类型吗Javascript typescript中的条件类型能否依赖于自身的值?,javascript,typescript,Javascript,Typescript,我可以在typescript中实现这样的类型吗 type Someone = { who: string; } type Someone = Someone.who === "me" ? Someone & Me : Someone; 我认为a可以起作用: 键入Me={ 谁:“我”, 秘密:字符串; } 其他类型={ 谁:'其他', } 输入Someone=Me | Other; 我认为a可以工作: 键入Me={ 谁:“我”, 秘密:字符串; } 其他类型=
type Someone = {
who: string;
}
type Someone = Someone.who === "me" ? Someone & Me : Someone;
我认为a可以起作用:
键入Me={
谁:“我”,
秘密:字符串;
}
其他类型={
谁:'其他',
}
输入Someone=Me | Other;
我认为a可以工作:
键入Me={
谁:“我”,
秘密:字符串;
}
其他类型={
谁:'其他',
}
输入Someone=Me | Other;
是的,您可以在和的帮助下执行此操作
下面是一个简单的工作示例:
type Someone<T extends string> = {
who: T;
}
type Me = {
me: boolean;
}
type Thisone<T extends string> = T extends 'me' ? Someone<T> & Me : Someone<T>;
function whoami<T extends string>(who: T) {
return {
who,
me: who === 'me' ? true : undefined
} as Thisone<T>
}
const a = whoami('you');
const b = whoami('me');
a.who; // ok
a.me; // error
b.who; // ok
b.me; // ok
键入某人={
世卫组织:T;
}
键入Me={
me:布尔值;
}
键入Thisone=T扩展“me”?某人&我:某人;
功能whoami(who:T){
返回{
谁
我:谁==“我”?对:未定义
}就像这个
}
常数a=whoami(“你”);
常数b=whoami(“我”);
a、 谁;//好啊
a、 我;//错误
b、 谁;//好啊
b、 我;//好啊
.是的,您可以在和的帮助下这样做 下面是一个简单的工作示例:
type Someone<T extends string> = {
who: T;
}
type Me = {
me: boolean;
}
type Thisone<T extends string> = T extends 'me' ? Someone<T> & Me : Someone<T>;
function whoami<T extends string>(who: T) {
return {
who,
me: who === 'me' ? true : undefined
} as Thisone<T>
}
const a = whoami('you');
const b = whoami('me');
a.who; // ok
a.me; // error
b.who; // ok
b.me; // ok
键入某人={
世卫组织:T;
}
键入Me={
me:布尔值;
}
键入Thisone=T扩展“me”?某人&我:某人;
功能whoami(who:T){
返回{
谁
我:谁==“我”?对:未定义
}就像这个
}
常数a=whoami(“你”);
常数b=whoami(“我”);
a、 谁;//好啊
a、 我;//错误
b、 谁;//好啊
b、 我;//好啊
.该示例没有意义,因为编译时类型不能依赖于运行时值。该示例没有意义,因为编译时类型不能依赖于运行时值。我认为在您的示例中,需要指定“t”参数,我希望它自动获取值,例如``const a:Someone={who:“me”,me:true}//ok const b:Someone={who:“you”,me:true}//error````@ZhenyaUsenko这是不可能的,因为这意味着取决于运行时的值。类型检查只发生在编译时,这就是为什么您需要使用
T
设置类型约束。顺便说一句,上面的答案对我很有用,谢谢您的帮助。我认为在您的示例中需要指定“T”参数,我希望它自动获取一个值,例如``const a:Someone={who:“me”,me:true}//ok const b:Someone={who:“you”,me:true}//错误```@ZhenyaUsenko这是不可能的,因为这意味着取决于运行时的值。类型检查只发生在编译时,这就是为什么你需要用T
设置类型约束。顺便说一句,上面的答案对我有效,谢谢你的帮助,这对我来说确实有效,而且看起来非常简单)谢谢,现在只需要将所有接口重写为类型,因为这个东西对InterfaceSdam不起作用,这对我来说真的很有用,看起来也很简单)谢谢,现在只需要将所有接口重写为类型,因为这不适用于接口