[Typescript] Constraint inputs types

const returnsValueOnly = <T>(t: T) => {
    return t;
}
const result = returnsValueOnly("a"); // const returnsValueOnly: <"a">(t: "a") => "a"

const returnsValueInAnObject = <T1>(t: T1) => {
  return {
    t,
  };
};
const result2 = returnsValueInAnObject("abc");
/**
 const result2: {
    t: string;
 }
 */

// With a constraint, it narrows it to its literal
const returnsValueInAnObjectWithConstraint = <T1 extends string>(t: T1) => {
  return {
    t,
  };
};
const result3 = returnsValueInAnObjectWithConstraint("abc");

// With a constraint, it narrows it to its literal
const returnsValueInAnObjectWithConstraint2 = <const T1>(t: T1) => {
  return {
    t,
  };
};
const result31 = returnsValueInAnObjectWithConstraint("abc");

/*
const result3: {
    t: "abc";
}
 */

const acceptsValueInAnObject = <T>(obj: { input: T }) => {
  return obj.input;
};
const result4 = acceptsValueInAnObject({ input: "abc" }); //string

const acceptsValueInAnObjectFieldWithConstraint = <T extends string>(obj: {
  input: T;
}) => {
  return obj.input;
};
const result5 = acceptsValueInAnObjectFieldWithConstraint({ input: "abc" });
/*
const acceptsValueInAnObjectFieldWithConstraint: <"abc">(obj: {
    input: "abc";
}) => "abc"
 */

const acceptsValueWithObjectConstraint = <
  T extends {
    input: string;
  },
>(
  obj: T,
) => {
  return obj.input;
};
const result7 = acceptsValueWithObjectConstraint({ input: "abc" });

const result4WithAsConst = acceptsValueWithObjectConstraint({
  input: "abc",
} as const);

 

posted @ 2023-02-25 15:53  Zhentiw  阅读(16)  评论(0)    收藏  举报