【发布时间】:2020-09-01 06:20:31
【问题描述】:
我仍在学习打字稿的复杂性。
在试图弄清楚 Typescript: Generic to specific type 时,我遇到了另一种情况,我不明白 Typescript 是如何解决的。
export type GenericType = {
[key: string]: {
prop1: string,
prop2?: string,
prop3?: number,
}
};
const GoodObj: GenericType = {
key1: {
prop1: "hi",
// prop5: "what", // Type '{ prop1: string; prop5: string; }' is not assignable to type '{ prop1: string; prop2?: string; prop3?: number; }'.
},
key2: {
prop1: "bye",
prop2: "sup",
},
};
console.log(GoodObj);
const BadObj = {
key1: {
prop1: "hi",
prop5: "what",
},
key2: {
prop1: "bye",
prop2: "sup",
},
};
const BadObjGen: GenericType = BadObj;
console.log(BadObjGen);
在上面的示例中,如果我将无效的道具放入 GoodObj,打字稿会报错,就像我对 BadObj 所做的那样。但是,当我将无效的 obj 分配给 BadObjGen 时,BadObj 不会抱怨。
然而,如果我对原语做同样的事情,它确实会抱怨。
const type1: number = 1;
const type2: string = type1; // Type 'number' is not assignable to type 'string'
Typescript 在什么情况下对对象进行类型检查?
代码沙盒 - https://codesandbox.io/s/typescript-experiment-hp92o?file=/src/index.ts:175-316
【问题讨论】:
-
const BadObjGen: GenericType = BadObj;和const BadObjGen = BadObj as GenericType;一样,基本上是告诉ts 强制转换类型,object 可以强制转换为另一个object,但是number 和string 这两种基本类型是不可转换的.
标签: typescript