我正在撰寫一個測驗,我正在創建一個物件文字。例如:
const myObject = {
id: 1,
name: 'egg',
error: null
}
的初始化值為myObject.error空。但是,當我稍后嘗試將其設定為新值時。例如:
myObject.error = ['exception', 'mapping']
我為它分配了一個新值,string[]但出現錯誤:
Type 'string[]' is not assignable to type 'null'.ts(2322)
myObject 不是介面或型別,為什么它期望它始終為空值?
謝謝!
uj5u.com熱心網友回復:
發生這種情況是因為您沒有為myObjectconst專門定義任何其他型別,這將導致 TypeScript 默認分配以下型別定義:
const myObject: {
id: number;
name: string;
error: null;
}
是的,null是 TypeScript 型別,顯然string[]與它不兼容。但是,您可以自己定義型別,并使其兼容,如下所示:
type ObjectType = {
id: number;
name: string;
error: null | string[];
}
const myObject: ObjectType = {
id: 1,
name: 'egg',
error: null
}
myObject.error = ['exception', 'mapping']
通過這種方式,您讓 TypeScript 知道,它myObject.error可以假設null或string[]型別值。
uj5u.com熱心網友回復:
TypeScript 推斷(猜測)的型別myObject,在您的情況下是:
{
id: number;
name: string;
error: null;
}
當您嘗試分配給error它時,它會按預期失敗null。您可以創建一個介面:
interface Produce {
id: number;
name: string;
error: string[] | null;
}
const myObject: Produce = {
id: 1,
name: 'egg',
error: null
};
myObject.error = ['a']; // <== This works
關于 的用法null,您可以改用可選的T?,這相當于T | undefined:
interface Produce {
id: number;
name: string;
error?: string[];
}
const myObject: Produce = {
id: 1,
name: 'egg'
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/357428.html
標籤:javascript 打字稿
