11.残りの属性チェックの制限があるかどうか
12508 ワード
オブジェクト文字をタイプで指定された変数に割り当てると、tsはそのタイプの属性が存在するかどうか、および他の属性が存在するかどうかをチェックします.
interface Room {
numDoors: number;
ceilingHeightFt: number;
}
const r: Room = {
numDoors: 1,
ceilingHeightFt: 10,
elephant: "present",
// ~~~~~~~~~~~~~~~~~~ Object literal may only specify known properties,
// and 'elephant' does not exist in type 'Room'
};
テストに一時変数を導入objタイプは、スタジオタイプのサブセットを含み、スタジオに割り当てられ、タイプフィルタによって
interface Room {
numDoors: number;
ceilingHeightFt: number;
}
const obj = {
numDoors: 1,
ceilingHeightFt: 10,
elephant: 'present',
};
const r: Room = obj; // OK
tsは、実行時に例外を投げ出すコードにエラーを表示するだけでなく、あなたの意図とは異なるコードを検索しようとします.interface Room {
numDoors: number;
ceilingHeightFt: number;
}
function setDarkMode() {}
interface Options {
title: string;
darkMode?: boolean;
}
function createWindow(options: Options) {
if (options.darkMode) {
setDarkMode();
}
// ...
}
createWindow({
title: 'Spider Solitaire',
darkmode: true
// ~~~~~~~~~~~~~ Object literal may only specify known properties, but
// 'darkmode' does not exist in type 'Options'.
// Did you mean to write 'darkMode'?
// darkmode가 아닌 darkMode로 사용해야됨
});
Optionsタイプの範囲が非常に広いため、純粋な構造化タイプフィルタではこのようなエラーを見つけることができません.ダークモードアトリビュートにブール以外の値を指定しない限り、文字列タイプtitleアトリビュートと他の任意のアトリビュートを持つすべてのオブジェクトはOptionsタイプの範囲に属します.
interface Room {
numDoors: number;
ceilingHeightFt: number;
}
function setDarkMode() {}
interface Options {
title: string;
darkMode?: boolean;
}
const o1: Options = document; // OK
const o2: Options = new HTMLAnchorElement; // OK
断言ではなく宣言を使用するのはなぜですか?
interface Room {
numDoors: number;
ceilingHeightFt: number;
}
function setDarkMode() {}
interface Options {
title: string;
darkMode?: boolean;
}
const o: Options = { darkmode: true, title: 'Ski Free' };
// ~~~~~~~~ 'darkmode' does not exist in type 'Options'...
// 타입 구분 없는 임시 변수
const intermediate = { darkmode: true, title: 'Ski Free' }; // 객체 리터럴
// 객체 리터럴이 아님
const o: Options = intermediate; // OK
// 타입 단언문 사용
const o = { darkmode: true, title: 'Ski Free' } as Options; // OK
同様のチェックは、オプションのアトリビュートのみを持つ弱い(週)タイプでも機能します.interface LineChartOptions {
logscale?: boolean;
invertedYAxis?: boolean;
areaChart?: boolean;
}
const opts = { logScale: true };
const o: LineChartOptions = opts;
// ~ Type '{ logScale: boolean; }' has no properties in common
// with type 'LineChartOptions'
Reference
この問題について(11.残りの属性チェックの制限があるかどうか), 我々は、より多くの情報をここで見つけました https://velog.io/@jazziron/11テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol