Javascript 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={ 谁:“我”, 秘密:字符串; } 其他类型=

我可以在typescript中实现这样的类型吗

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不起作用,这对我来说真的很有用,看起来也很简单)谢谢,现在只需要将所有接口重写为类型,因为这不适用于接口