Скажем, у меня есть код вдоль линий этого:Устранение типа неоднозначность в машинописном
function defaultIt(s: MaybeString): string {
if (typeof s.content === "string") {
return s.content;
}
return "";
}
class MaybeString {
content: string|void;
}
Поправьте меня, если я ошибаюсь, но я считаю, что это о том, как тип безопасной, как вы можете получить; любой возможный ввод, который соответствует MaybeString
, приведет к строке. Тем не менее, TypeScript дает мне ошибку: Type 'string | void' is not assignable to type 'string'
.
Как заставить TypeScript распознавать, что я удалил неоднозначность, проверив тип?
Спасибо!
По общему признанию, я использовал только дескриптор в течение нескольких месяцев, но имеет ли смысл вводить 'content' как' string | void'? Правильно ли это «тип объединения»? Итак, что вы говорите, делая это, свойство 'content' ONLY имеет свойства, которые являются общими для' string' и 'void' (и поскольку' void' вообще не имеет свойств, 'string | void' в основном является то же самое, что и 'void'). Вы пытаетесь сказать, что свойство content является необязательным и может не иметь значения? –
Полагаю, я неправильно понял. Я думал, что это похоже на нечто вроде «Maybe». Есть ли способ сказать, что это может быть * или * строка или пустота? –
Я удалил свой ответ b/c, это было о дополнительных свойствах на интерфейсах. Но в основном вам не нужно делать ничего особенного (в отношении деклараций типов), если свойство класса необязательно. Это был вывод, к которому я пришел после того, как вы указали мою ошибку, и это подкреплено [этим ответом] (http://stackoverflow.com/a/18916914/398606). –