Существует ли типобезопасный способ выполнения ожидаемого (). to.deep.equal ()
blockquote>Не входит в определения типов
equal
, которые намеренноany
], поскольку он предназначен для проверки во время выполнения .Однако легко сделать внешне:
const expected: Foo = { bar: 'hello', baz: 'world', }; expect(getFoo()).to.deep.equal(expected);
RawByteString
только существует для уменьшения количества перегрузок, требуемых для функций, которые работают с различными ароматами AnsiString
s с различным сродством кодовой страницы.
В целом не объявляйте переменные типа RawByteString
. Не преобразовывайте тип значений к тому типу. Не делайте конкатенаций на переменных того типа. О единственных вещах можно сделать:
StringCodePage
функция.Например, Вы отметите что StringCodePage
функционируйте самостоятельно использует RawByteString
как его тип аргумента. Таким образом, это будет работать с любым AnsiString
, вместо того, чтобы делать перевод кодовой страницы прежде, чем передать его как аргумент.
Для Вашего случая вещи как конкатенации в основном не определены. Поведение, измененное между RTM и Обновлением 2, но когда функции конкатенации строк RTL получают несколько строк с различными кодовыми страницами, нет никакого простого способа к нему для выяснения, какая кодовая страница должна использоваться для заключительной строки. Это - всего одна причина, почему Вы не должны связывать их как Вы, делают здесь.
Вы не можете добавить строку к TMemo, "как". Вам всегда нужно к так некоторому преобразованию в Unicode, потому что это - весь TMemo, знает о в Delphi 2009.
Если Вы хотите притвориться, что Ваш UTF8String использует кодовую страницу 1252, сделайте это:
var
utf8Str : UTF8String;
Raw: RawByteString;
begin
utf8Str := '€ąćęłńóśźż';
Raw := utf8Str;
SetCodePage(Raw, 1252, False);
Memo.Lines.Add(Raw);
end;
Для получения дополнительной информации см. мою статью Using RawByteString Effectively